diff --git a/src/Core/Input/ConfigData/ConfigData.h b/src/Core/Input/ConfigData/ConfigData.h
index 3ea009cb578a84515875e46a8d36db6fd59ab5c6..acd5ee053b6f1972e7e36751c15387e16d976688 100644
--- a/src/Core/Input/ConfigData/ConfigData.h
+++ b/src/Core/Input/ConfigData/ConfigData.h
@@ -22,6 +22,10 @@ public:
 	virtual bool getCalcHighOrderMoments() = 0;
 	virtual bool getReadGeo() = 0;
 	virtual bool getCalcMedian() = 0;
+	virtual bool getCalcDragLift() = 0;
+	virtual bool getCalcCp() = 0;
+	virtual bool getWriteVeloASCIIfiles() = 0;
+	virtual bool getCalcPlaneConc() = 0;
 	virtual bool getConcFile() = 0;
 	virtual bool getStreetVelocityFile() = 0;
 	virtual bool getUseMeasurePoints() = 0;
@@ -104,6 +108,10 @@ public:
 	virtual bool isCalcHighOrderMomentsInConfigFile() = 0;
 	virtual bool isReadGeoInConfigFile() = 0;
 	virtual bool isCalcMedianInConfigFile() = 0;
+	virtual bool isCalcDragLiftInConfigFile() = 0;
+	virtual bool isCalcCpInConfigFile() = 0;
+	virtual bool isWriteVeloASCIIfilesInConfigFile() = 0;
+	virtual bool isCalcPlaneConcInConfigFile() = 0;
 	virtual bool isConcFileInConfigFile() = 0;
 	virtual bool isStreetVelocityFileInConfigFile() = 0;
 	virtual bool isUseMeasurePointsInConfigFile() = 0;
diff --git a/src/Core/Input/ConfigData/ConfigDataImp.cpp b/src/Core/Input/ConfigData/ConfigDataImp.cpp
index 0b6b88e91dd12d2acba1027744cc3b2314c36e00..48836eaa43ceb17748f7f105cdb24f509d665534 100644
--- a/src/Core/Input/ConfigData/ConfigDataImp.cpp
+++ b/src/Core/Input/ConfigData/ConfigDataImp.cpp
@@ -21,6 +21,8 @@ ConfigDataImp::ConfigDataImp()
 	this->isCalcHighOrderMoments=false;
 	this->isReadGeo=false;
 	this->isCalcMedian=false;
+	this->isCalcDragLift = false;
+	this->isCalcCp = false;
 	this->isConcFile=false;
 	this->isUseMeasurePoints=false;
 	this->isUseWale=false;
@@ -154,6 +156,26 @@ bool ConfigDataImp::getCalcMedian()
 	return this->calcMedian;
 }
 
+bool ConfigDataImp::getCalcDragLift()
+{
+	return this->calcDragLift;
+}
+
+bool ConfigDataImp::getCalcCp()
+{
+	return this->calcCp;
+}
+
+bool ConfigDataImp::getWriteVeloASCIIfiles()
+{
+	return this->writeVeloASCIIfiles;
+}
+
+bool ConfigDataImp::getCalcPlaneConc()
+{
+	return	this->calcPlaneConc;
+}
+
 bool ConfigDataImp::getConcFile()
 {
 	return this->concFile;
@@ -557,6 +579,30 @@ void ConfigDataImp::setCalcMedian(bool calcMedian)
 	this->isCalcMedian = true;
 }
 
+void ConfigDataImp::setCalcDragLift(bool calcDragLift)
+{
+	this->calcDragLift = calcDragLift;
+	this->isCalcDragLift = true;
+}
+
+void ConfigDataImp::setCalcCp(bool calcCp)
+{
+	this->calcCp = calcCp;
+	this->isCalcCp = true;
+}
+
+void ConfigDataImp::setWriteVeloASCIIfiles(bool writeVeloASCIIfiles)
+{
+	this->writeVeloASCIIfiles = writeVeloASCIIfiles;
+	this->isWriteVeloASCII = true;
+}
+
+void ConfigDataImp::setCalcPlaneConc(bool calcPlaneConc)
+{
+	this->calcPlaneConc = calcPlaneConc;
+	this->isCalcPlaneConc = true;
+}
+
 void ConfigDataImp::setConcFile(bool concFile)
 {
 	this->concFile = concFile;
@@ -978,6 +1024,26 @@ bool ConfigDataImp::isCalcMedianInConfigFile()
 	return this->isCalcMedian;
 }
 
+bool ConfigDataImp::isCalcDragLiftInConfigFile()
+{
+	return this->isCalcDragLift;
+}
+
+bool ConfigDataImp::isCalcCpInConfigFile()
+{
+	return this->isCalcCp;
+}
+
+bool ConfigDataImp::isWriteVeloASCIIfilesInConfigFile()
+{
+	return this->isWriteVeloASCII;
+}
+
+bool ConfigDataImp::isCalcPlaneConcInConfigFile()
+{
+	return this->isCalcPlaneConc;
+}
+
 bool ConfigDataImp::isConcFileInConfigFile()
 {
 	return this->isConcFile;
diff --git a/src/Core/Input/ConfigData/ConfigDataImp.h b/src/Core/Input/ConfigData/ConfigDataImp.h
index 99f62fc9b6e5dc2479b7bcfbad6f1fe632799445..bcd518056d282b89475ae8471207e5f86fc07bc4 100644
--- a/src/Core/Input/ConfigData/ConfigDataImp.h
+++ b/src/Core/Input/ConfigData/ConfigDataImp.h
@@ -25,6 +25,10 @@ public:
 	bool getCalcHighOrderMoments();
 	bool getReadGeo();
 	bool getCalcMedian();
+	bool getCalcDragLift();
+	bool getCalcCp();
+	bool getWriteVeloASCIIfiles();
+	bool getCalcPlaneConc();
 	bool getConcFile();
 	bool getStreetVelocityFile();
 	bool getUseMeasurePoints();
@@ -107,6 +111,10 @@ public:
 	void setCalcHighOrderMoments(bool calcHighOrderMoment);
 	void setReadGeo(bool readGeo);
 	void setCalcMedian(bool calcMedian);   
+	void setCalcDragLift(bool calcDragLift);
+	void setCalcCp(bool calcCp);
+	void setWriteVeloASCIIfiles(bool writeVeloASCIIfiles);
+	void setCalcPlaneConc(bool calcPlaneConc);
 	void setConcFile(bool concFile);
 	void setStreetVelocityFile(bool streetVelocityFile);
 	void setUseMeasurePoints(bool useMeasurePoints);
@@ -190,6 +198,10 @@ public:
 	bool isCalcHighOrderMomentsInConfigFile();
 	bool isReadGeoInConfigFile();
 	bool isCalcMedianInConfigFile();
+	bool isCalcDragLiftInConfigFile();
+	bool isCalcCpInConfigFile();
+	bool isWriteVeloASCIIfilesInConfigFile();
+	bool isCalcPlaneConcInConfigFile();
 	bool isConcFileInConfigFile();
 	bool isStreetVelocityFileInConfigFile();
 	bool isUseMeasurePointsInConfigFile();
@@ -275,6 +287,10 @@ private:
 	bool calcHighOrderMoments;
 	bool readGeo;
 	bool calcMedian;
+	bool calcDragLift;
+	bool calcCp;
+	bool writeVeloASCIIfiles;
+	bool calcPlaneConc;
 	bool concFile;
 	bool streetVelocityFile;
 	bool useMeasurePoints;
@@ -358,6 +374,10 @@ private:
 	bool isCalcHighOrderMoments;
 	bool isReadGeo;
 	bool isCalcMedian;
+	bool isCalcDragLift;
+	bool isCalcCp;
+	bool isWriteVeloASCII;
+	bool isCalcPlaneConc;
 	bool isConcFile;
 	bool isStreetVelocityFile;
 	bool isUseMeasurePoints;
diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
index adbf9f1b48fb60463320d05884c88f0b7ff91e95..3ffc8625a265b1e9ec6bbe7746172661cd23601f 100644
--- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
+++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
@@ -290,6 +290,8 @@ void LevelGridBuilder::getNodeValues(real *xCoords, real *yCoords, real *zCoords
     grids[level]->getNodeValues(xCoords, yCoords, zCoords, neighborX, neighborY, neighborZ, neighborNegative, geo);
 }
 
+//TODO: add getSlipSize...
+
 
 uint LevelGridBuilder::getVelocitySize(int level) const
 {
@@ -301,6 +303,9 @@ uint LevelGridBuilder::getVelocitySize(int level) const
     return size;
 }
 
+//TODO: add getSlipIndices...
+
+
 void LevelGridBuilder::getVelocityValues(real* vx, real* vy, real* vz, int* indices, int level) const
 {
     int allIndicesCounter = 0;
diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
index 64fc74759f173fbd3c6c729739cca129aa3e2d8e..5787b6efafee882b83c2721b6c26754a2d35918a 100644
--- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
+++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
@@ -94,6 +94,10 @@ protected:
         std::vector<SPtr<VelocityBoundaryCondition> > velocityBoundaryConditions;
         std::vector<SPtr<PressureBoundaryCondition> > pressureBoundaryConditions;
 
+		//TODO: add slip BC
+
+
+
         std::vector<SPtr<VelocityBoundaryCondition> > noSlipBoundaryConditions;
 
         SPtr<GeometryBoundaryCondition> geometryBoundaryCondition;
diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
index b080b5dca747cee6bf2b4474da628d0910ccdfe3..52726d5322a86bd42e03f48986c01ad2b6db0ed2 100644
--- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
+++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
@@ -211,6 +211,9 @@ std::array<real, 6> MultipleGridBuilder::getStaggeredCoordinates(Object* gridSha
 {
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //
+    // This method computes the start and end coordinates with respect to the coarse grid
+    // The following sketch visualizes this procedure for level 2:
+    //
     //                          /----------------------- domain --------------------------------\ 
     //                          |                      /----------------- refinement region ------------------------\
     //                          |                      |                                        |                   |
@@ -415,15 +418,49 @@ std::vector<SPtr<Grid> > MultipleGridBuilder::getGrids() const
     return this->grids;
 }
 
+// this method initiates the actual grid generation
+//
+//  => before calling this MultipleGridBuilder::buildGrids(...), several options 
+//     parameters and similar have to be set for the grid generation:
+//      => MultipleGridBuilder::addCoarseGrid(...)                      => background grid
+//      => MultipleGridBuilder::setNumberOfLayers(...)                  => additional layers outside refinement region
+//      => MultipleGridBuilder::addGrid(..)                             => refinement region
+//      => MultipleGridBuilder::setSubDomainBox(...)                    => sub domain for Multi GPU
+//      => MultipleGridBuilder::addGeometry(...)                        => object for solid domain
+//      => MultipleGridBuilder::setPeriodicBoundaryCondition(...)       => periodicity
+//
+//  => LBM boundary conditions are set after MultipleGridBuilder::buildGrids(...):
+//      => LevelGridBuilder::setVelocityBoundaryCondition(...)
+//      => LevelGridBuilder::setPressureBoundaryCondition(...)
+//      => GeometryBoundaryCondition::setTangentialVelocityForPatch(...)
+//      => VelocityBoundaryCondition::setVelocityProfile(...)
+//
+//  => Multi GPU connectivity is set after MultipleGridBuilder::buildGrids(...):
+//      => MultipleGridBuilder::findCommunicationIndices(...)
+//      => LevelGridBuilder::setCommunicationProcess(...)
+//
 void MultipleGridBuilder::buildGrids( LbmOrGks lbmOrGks, bool enableThinWalls )
 {
     //////////////////////////////////////////////////////////////////////////
 
-    // orginal version with scaling the object (also use old version of MultipleGridBuilder::addGrid()
-    //for (auto grid : grids)
-    //    grid->inital();
-
-     //new version with 
+    // initialize the grids:
+    //      => allocate memory
+    //      => set everything to INVALID_OUT_OF_GRID
+    //      => find nodes inside the refinement region, either based on 
+    //         an object or on the shape of the underlying fine grid
+    //      => add overlap as specified by MultipleGridBuilder::setNumberOfLayers
+    //      => fix odd cells, such that we obtain steps of size on the 
+    //         boundary of the grid (for complete cells for interpolation)
+    //      => fix refinement into the wall, i.e. make sure the refinement 
+    //         goes straight into the walls
+    //      => set stopper nodes to STOPPER_OUT_OF_GRID and STOPPER_OUT_OF_GRID_BOUNDARY
+    //
+    // the number of layers is passed to the Grid::initial(...) method as argument
+    //
+    // For further documentation of the grid initialization see Section 5.2.2 and
+    // Figure 5.2 in the Dissertation of Stephan Lenz:
+    // https://publikationsserver.tu-braunschweig.de/receive/dbbs_mods_00068716
+    //
     for( int level = grids.size()-1; level >= 0; level-- ){
 
         *logging::out << logging::Logger::INFO_INTERMEDIATE << "Start initializing level " << level << "\n";
@@ -431,11 +468,6 @@ void MultipleGridBuilder::buildGrids( LbmOrGks lbmOrGks, bool enableThinWalls )
         // On the coarse grid every thing is Fluid (w.r.t. the refinement)
         // On the finest grid the Fluid region is defined by the Object
         // On the intermediate levels the Fluid region is defined by the fluid region of the finer level
-        //if( level == 0 || level == grids.size()-1 )
-        //    grids[level]->inital();
-        //else
-        //    grids[level]->inital( grids[level+1] );
-        
         if     ( level == 0 )
             grids[level]->inital( nullptr, 0 );
         else if( level == grids.size()-1 )
@@ -448,16 +480,41 @@ void MultipleGridBuilder::buildGrids( LbmOrGks lbmOrGks, bool enableThinWalls )
 
     //////////////////////////////////////////////////////////////////////////
 
+    // set the solid region and find Qs
+    // this is only done if a solid object was added to the GridBuilder
+    //
+    // For further documentation of the treatment of solid objects see Section 5.2.3
+    // and figure 5.3 in the Dissertation of Stephan Lenz:
+    // https://publikationsserver.tu-braunschweig.de/receive/dbbs_mods_00068716
+    //
     if (solidObject)
     {
 
         *logging::out << logging::Logger::INFO_INTERMEDIATE << "Start with Q Computation\n";
 
+        // Currently the solid object is only used on the finest grid,
+        // because refinement into solid objects is not yet implemented.
+        // If the solid object does not intersect the interfaces, it 
+        // might be possible to have a solid object on more than the finest
+        // level (See Bachelor thesis of Lennard Lux). To enable this, 
+        // change the following two lines. This is not tested though!
+
         //for( uint level = 0; level < grids.size(); level++ )
         uint level = grids.size() - 1;
         {
+            // the Grid::mesh(...) method distinguishes inside and ouside regions
+            // of the solid domain.:
+            //      => set inner nodes to INVALID_SOLID
+            //      => close needle sells
+            //      => set one layer of STOPPER_SOLID nodes in the solid domain
+            //      => set one layer of BC_SOLID nodes in the fluid domain
             grids[level]->mesh(solidObject);
 
+            // if thin walls are enables additional BC_SOLID nodes are found by
+            // Grid::findOs(...). To prevent the actual Q computation, 
+            // Grid::enableFindSolidBoundaryNodes() and Grid::enableComputeQs()
+            // set a flag that changes the behavior of Grid::findOs(...);
+            // additionally some needle cells are closed in this process.
             if (enableThinWalls) {
                 grids[level]->enableFindSolidBoundaryNodes();
                 grids[level]->findQs(solidObject);
@@ -465,34 +522,53 @@ void MultipleGridBuilder::buildGrids( LbmOrGks lbmOrGks, bool enableThinWalls )
                 grids[level]->enableComputeQs();
             }
 
+            // compute the sub grid distances 
+            // this works for STL and Sphere objects, but not yet for other primitives!
             if( lbmOrGks == LBM )
                 grids[level]->findQs(solidObject);
         }
 
-        //for (size_t i = 0; i < grids.size(); i++){
-        //    grids[i]->mesh(solidObject);
-        //    grids[i]->findQs(solidObject);
-        //}
-
         *logging::out << logging::Logger::INFO_INTERMEDIATE << "Done with Q Computation\n";
     }
 
+    //////////////////////////////////////////////////////////////////////////
+
+    // find the interface interpolations cells
+    // For further documentation see Section 5.2.4 and Figure 5.3 in the dissertation
+    // of Stephan Lenz:
+    // https://publikationsserver.tu-braunschweig.de/receive/dbbs_mods_00068716
+    //
     for (size_t i = 0; i < grids.size() - 1; i++)
         grids[i]->findGridInterface(grids[i + 1], lbmOrGks);
 
+    //////////////////////////////////////////////////////////////////////////
+
+    // set all points outside the sub domain to STOPPER_OUT_OF_GRID_BOUNDARY
+    // and INVALID_OUT_OF_GRID
     if( this->subDomainBox )
         for (size_t i = 0; i < grids.size(); i++)
             grids[i]->limitToSubDomain( this->subDomainBox, lbmOrGks );
 
+    //////////////////////////////////////////////////////////////////////////
+
+    // shrinks the interface cell lists to the correct size
     for (size_t i = 0; i < grids.size() - 1; i++)
         grids[i]->repairGridInterfaceOnMultiGPU(grids[i + 1]);
 
+    //////////////////////////////////////////////////////////////////////////
+
+    // unrolls the matrix
+    //      => computes the sparse indices
+    //      => generates neighbor connectivity taking into account periodic boundaries
+    //      => undates the interface connectivity to sparse indices (overwrites matrix indices!)
 	if (lbmOrGks == LBM) {
 		for (size_t i = 0; i < grids.size() - 1; i++)
 			grids[i]->findSparseIndices(grids[i + 1]);
 
 		grids[grids.size() - 1]->findSparseIndices(nullptr);
 	}
+
+    //////////////////////////////////////////////////////////////////////////
 }
 
 VF_PUBLIC void MultipleGridBuilder::setNumberOfLayers(uint numberOfLayersFine, uint numberOfLayersBetweenLevels)
diff --git a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
index 1cdee8cd39b62006ed1aa28e856fcca4c2c641f1..b40d67517f6c72c6fefe64249ab956e8bda739a8 100644
--- a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
+++ b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
@@ -8,2002 +8,1246 @@
 #include "Communication/ExchangeData27.h"
 #include "Kernel/Kernel.h"
 
+void updateGrid27(Parameter* para, 
+                  Communicator* comm, 
+                  CudaMemoryManager* cudaManager, 
+                  std::vector<std::shared_ptr<PorousMedia>>& pm, 
+                  int level, 
+                  unsigned int t, 
+                  std::vector < SPtr< Kernel>>& kernels)
+{
+    //////////////////////////////////////////////////////////////////////////
+
+    if( level != para->getFine() )
+    {
+        updateGrid27(para, comm, cudaManager, pm, level+1, t, kernels);
+        updateGrid27(para, comm, cudaManager, pm, level+1, t, kernels);
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+
+    collision(para, pm, level, t, kernels);
+
+    //////////////////////////////////////////////////////////////////////////
+
+    exchangeMultiGPU(para, comm, cudaManager, level);
+
+    //////////////////////////////////////////////////////////////////////////
+
+    postCollisionBC(para, level, t);
+
+    //////////////////////////////////////////////////////////////////////////
+
+    swapBetweenEvenAndOddTimestep(para, level);
+
+	//////////////////////////////////////////////////////////////////////////
+
+	if (para->getUseWale())
+		calcMacroscopicQuantities(para, level);
 
+	//////////////////////////////////////////////////////////////////////////
 
+    preCollisionBC(para, cudaManager, level, t);
+
+    //////////////////////////////////////////////////////////////////////////
+
+    if( level != para->getFine() )
+    {
+        fineToCoarse(para, level);
+
+        exchangeMultiGPU(para, comm, cudaManager, level);
+
+        coarseToFine(para, level);
+    }
+}
+
+void collision(Parameter* para, std::vector<std::shared_ptr<PorousMedia>>& pm, int level, unsigned int t, std::vector < SPtr< Kernel>>& kernels)
+{
+    kernels.at(level)->run();
+
+    //////////////////////////////////////////////////////////////////////////
+
+    if (para->getSimulatePorousMedia())
+        collisionPorousMedia(para, pm, level);
+
+    //////////////////////////////////////////////////////////////////////////
+
+    if (para->getDiffOn())
+        collisionAdvectionDiffusion(para, level);
+}
 
-void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaManager, std::vector<std::shared_ptr<PorousMedia>> pm, int level, int max_level, unsigned int t, std::vector < SPtr< Kernel>> kernels)
+void collisionPorousMedia(Parameter* para, std::vector<std::shared_ptr<PorousMedia>>& pm, int level)
 {
-   if ( level == para->getFine() )
-   {
-      for (int internaltimestep=0;internaltimestep<2;internaltimestep++)
-      {
-		  kernels.at(level)->run();
-		  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		  //if (t>para->getStartTurn()){
-			 // para->setPhi((para->getPhi()+para->getParD(level)->deltaPhi));
-			 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 // KernelKum1hSP27(    para->getParD(level)->numberofthreads,       
-				//				  para->getParD(level)->omega,
-				//				  para->getParD(level)->deltaPhi,
-				//				  para->getAngularVelocity(),
-				//				  para->getParD(level)->geoSP, 
-				//				  para->getParD(level)->neighborX_SP, 
-				//				  para->getParD(level)->neighborY_SP, 
-				//				  para->getParD(level)->neighborZ_SP,
-				//				  para->getParD(level)->coordX_SP, 
-				//				  para->getParD(level)->coordY_SP, 
-				//				  para->getParD(level)->coordZ_SP,
-				//				  para->getParD(level)->d0SP.f[0],    
-				//				  para->getParD(level)->size_Mat_SP,  
-				//				  para->getParD(level)->evenOrOdd); 
-			 // getLastCudaError("KernelCasSPKum27 execution failed");
-			 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 // QVelDevice1h27(   para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-				//				para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-				//				para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-				//				para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,          
-				//				para->getPhi(),                        para->getAngularVelocity(),
-				//				para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-				//				para->getParD(level)->coordX_SP,       para->getParD(level)->coordY_SP,    para->getParD(level)->coordZ_SP,
-				//				para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		  //    getLastCudaError("QVelDev27 execution failed");
-			 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		  //}
-		  //else{
-			 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 // KernelKum1hSP27(    para->getParD(level)->numberofthreads,       
-				//				  para->getParD(level)->omega,
-				//				  (real)0.0,
-				//				  (real)0.0,
-				//				  para->getParD(level)->geoSP, 
-				//				  para->getParD(level)->neighborX_SP, 
-				//				  para->getParD(level)->neighborY_SP, 
-				//				  para->getParD(level)->neighborZ_SP,
-				//				  para->getParD(level)->coordX_SP, 
-				//				  para->getParD(level)->coordY_SP, 
-				//				  para->getParD(level)->coordZ_SP,
-				//				  para->getParD(level)->d0SP.f[0],    
-				//				  para->getParD(level)->size_Mat_SP,  
-				//				  para->getParD(level)->evenOrOdd); 
-			 // getLastCudaError("KernelCasSPKum27 execution failed");
-			 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 // QVelDevice1h27(   para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-				//				para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-				//				para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-				//				para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,          
-				//				para->getPhi(),                        (real)0.0,
-				//				para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-				//				para->getParD(level)->coordX_SP,       para->getParD(level)->coordY_SP,    para->getParD(level)->coordZ_SP,
-				//				para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		  //    getLastCudaError("QVelDev27 execution failed");
-			 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		  //}
-		  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 //KernelKumAA2016CompBulkSP27(para->getParD(level)->numberofthreads,       
-				//						 para->getParD(level)->omega, 
-				//						 para->getParD(level)->geoSP, 
-				//						 para->getParD(level)->neighborX_SP, 
-				//						 para->getParD(level)->neighborY_SP, 
-				//						 para->getParD(level)->neighborZ_SP,
-				//						 para->getParD(level)->d0SP.f[0],    
-				//						 para->getParD(level)->size_Mat_SP,
-				//						 para->getParD(level)->size_Array_SP,
-				//						 level,
-				//						 para->getForcesDev(),
-				//						 para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelKumAA2016CompBulkSP27 execution failed");
-			 //KernelKumAA2016CompSP27(para->getParD(level)->numberofthreads,       
-				//				     para->getParD(level)->omega, 
-				//				     para->getParD(level)->geoSP, 
-				//				     para->getParD(level)->neighborX_SP, 
-				//				     para->getParD(level)->neighborY_SP, 
-				//				     para->getParD(level)->neighborZ_SP,
-				//				     para->getParD(level)->d0SP.f[0],    
-				//				     para->getParD(level)->size_Mat_SP,
-				//				     level,
-				//				     para->getForcesDev(),
-				//				     para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelKumAA2016CompSP27 execution failed");
-		 //KernelBGKPlusCompSP27(para->getParD(level)->numberofthreads,       
-		 //					   para->getParD(level)->omega, 
-		 //					   para->getParD(level)->geoSP, 
-		 //					   para->getParD(level)->neighborX_SP, 
-		 //					   para->getParD(level)->neighborY_SP, 
-		 //					   para->getParD(level)->neighborZ_SP,
-		 //					   para->getParD(level)->d0SP.f[0],    
-		 //					   para->getParD(level)->size_Mat_SP,  
-		 //					   para->getParD(level)->evenOrOdd); 
-		 //getLastCudaError("KernelBGKPlusSP27 execution failed");
-		 //printf("Level: %d \n", level);
-
-
-		//KernelKumNewCompSP27(para->getParD(level)->numberofthreads,       
-		//					  para->getParD(level)->omega, 
-		//					  para->getParD(level)->geoSP, 
-		//					  para->getParD(level)->neighborX_SP, 
-		//					  para->getParD(level)->neighborY_SP, 
-		//					  para->getParD(level)->neighborZ_SP,
-		//					  para->getParD(level)->d0SP.f[0],    
-		//					  para->getParD(level)->size_Mat_SP,  
-		//					  para->getParD(level)->size_Array_SP,
-		//					  level,
-		//					  para->getForcesDev(),
-		//					  para->getParD(level)->evenOrOdd); 
-		//getLastCudaError("KernelCasSPKum27 execution failed");
- 			//F3
-			//KernelCumulantD3Q27F3(para->getParD(level)->numberofthreads,
-			//					  para->getParD(level)->omega, 
-			//					  para->getParD(level)->geoSP, 
-			//					  para->getParD(level)->neighborX_SP, 
-			//					  para->getParD(level)->neighborY_SP, 
-			//					  para->getParD(level)->neighborZ_SP,
-			//					  para->getParD(level)->d0SP.f[0],    
-			//					  para->getParD(level)->g6.g[0],    
-			//					  para->getParD(level)->size_Mat_SP,
-			//					  level,
-			//					  para->getForcesDev(),
-			//					  para->getParD(level)->evenOrOdd);
-			//getLastCudaError("KernelCumulantD3Q27F3 execution failed");
-
-		  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		  //KernelKumCompSP27(  para->getParD(level)->numberofthreads,       
-				//			  para->getParD(level)->omega, 
-				//			  para->getParD(level)->geoSP, 
-				//			  para->getParD(level)->neighborX_SP, 
-				//			  para->getParD(level)->neighborY_SP, 
-				//			  para->getParD(level)->neighborZ_SP,
-				//			  para->getParD(level)->d0SP.f[0],    
-				//			  para->getParD(level)->size_Mat_SP,  
-				//			  para->getParD(level)->evenOrOdd); 
-		  //getLastCudaError("KernelCasSPKum27 execution failed");
-		  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- 		  //KernelBGKPlusSP27(para->getParD(level)->numberofthreads,       
- 		 	//			    para->getParD(level)->omega, 
- 		 	//			    para->getParD(level)->geoSP, 
- 		 	//			    para->getParD(level)->neighborX_SP, 
- 		 	//			    para->getParD(level)->neighborY_SP, 
- 		 	//			    para->getParD(level)->neighborZ_SP,
- 		 	//			    para->getParD(level)->d0SP.f[0],    
- 		 	//			    para->getParD(level)->size_Mat_SP,  
- 		 	//			    para->getParD(level)->evenOrOdd); 
- 		  //getLastCudaError("KernelBGKPlusSP27 execution failed");
-		  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-  		 // KernelMRTSP27(para->getParD(level)->numberofthreads,       
-  			//			para->getParD(level)->omega, 
-  			//			para->getParD(level)->geoSP, 
-  			//			para->getParD(level)->neighborX_SP, 
-  			//			para->getParD(level)->neighborY_SP, 
-  			//			para->getParD(level)->neighborZ_SP,
-  			//			para->getParD(level)->d0SP.f[0],    
-  			//			para->getParD(level)->size_Mat_SP,  
-  			//			para->getParD(level)->evenOrOdd); 
-  		 //getLastCudaError("KernelMRT27 execution failed");
-		 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- 		 //KernelCascadeSP27(para->getParD(level)->numberofthreads,       
- 			//			   para->getParD(level)->omega, 
- 			//			   para->getParD(level)->geoSP, 
- 			//			   para->getParD(level)->neighborX_SP, 
- 			//			   para->getParD(level)->neighborY_SP, 
- 			//			   para->getParD(level)->neighborZ_SP,
- 			//			   para->getParD(level)->d0SP.f[0],    
- 			//			   para->getParD(level)->size_Mat_SP,  
- 			//			   para->getParD(level)->evenOrOdd); 
- 		 // getLastCudaError("KernelCas27 execution failed");
-		  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		  //KernelKumNewSP27(   para->getParD(level)->numberofthreads,       
-				//			  para->getParD(level)->omega, 
-				//			  para->getParD(level)->geoSP, 
-				//			  para->getParD(level)->neighborX_SP, 
-				//			  para->getParD(level)->neighborY_SP, 
-				//			  para->getParD(level)->neighborZ_SP,
-				//			  para->getParD(level)->d0SP.f[0],    
-				//			  para->getParD(level)->size_Mat_SP,  
-				//			  para->getParD(level)->evenOrOdd); 
-		  //getLastCudaError("KernelCasSPKum27 execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //KernelCasSPMSOHM27(  para->getParD(level)->numberofthreads,       
-         //                     para->getParD(level)->omega, 
-         //                     para->getParD(level)->geoSP, 
-         //                     para->getParD(level)->neighborX_SP, 
-         //                     para->getParD(level)->neighborY_SP, 
-         //                     para->getParD(level)->neighborZ_SP,
-         //                     para->getParD(level)->d0SP.f[0],    
-         //                     para->getParD(level)->size_Mat_SP,  
-         //                     para->getParD(level)->evenOrOdd); 
-         //getLastCudaError("KernelCasSP27 execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //KernelCasSPMS27(  para->getParD(level)->numberofthreads,       
-         //                  para->getParD(level)->omega, 
-         //                  para->getParD(level)->geoSP, 
-         //                  para->getParD(level)->neighborX_SP, 
-         //                  para->getParD(level)->neighborY_SP, 
-         //                  para->getParD(level)->neighborZ_SP,
-         //                  para->getParD(level)->d0SP.f[0],    
-         //                  para->getParD(level)->size_Mat_SP,  
-         //                  para->getParD(level)->evenOrOdd); 
-         //getLastCudaError("KernelCasSP27 execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //KernelCasSP27( para->getParD(level)->numberofthreads,       
-         //               para->getParD(level)->omega, 
-         //               para->getParD(level)->geoSP, 
-         //               para->getParD(level)->neighborX_SP, 
-         //               para->getParD(level)->neighborY_SP, 
-         //               para->getParD(level)->neighborZ_SP,
-         //               para->getParD(level)->d0SP.f[0],    
-         //               para->getParD(level)->size_Mat_SP,  
-         //               para->getParD(level)->evenOrOdd); 
-         //getLastCudaError("KernelCasSP27 execution failed");
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 //porous media
-		 if (para->getSimulatePorousMedia())
-		 {
-			 //////////////////////////////////////////////////////////////////////////
-			 //Porous Media 0
-			 //KernelPMCumOneCompSP27(para->getParD(level)->numberofthreads,
-			//						para->getParD(level)->omega,
-			//						para->getParD(level)->neighborX_SP,
-			//						para->getParD(level)->neighborY_SP,
-			//						para->getParD(level)->neighborZ_SP,
-			//						para->getParD(level)->d0SP.f[0],
-			//						para->getParD(level)->size_Mat_SP,
-			//						level,
-			//						para->getForcesDev(),
-			//						pm[0]->getPorosity(),
-			//						pm[0]->getDarcyLBM(),
-			//						pm[0]->getForchheimerLBM(),
-			//						pm[0]->getSizePM(),
-			//						pm[0]->getHostNodeIDsPM(),
-			//						para->getParD(level)->evenOrOdd);
-			 //getLastCudaError("KernelPMCumOneCompSP27 execution failed");
-			 //////////////////////////////////////////////////////////////////////////
-			 //Porous Media 1
-			 //KernelPMCumOneCompSP27(para->getParD(level)->numberofthreads,
-			//						para->getParD(level)->omega,
-			//						para->getParD(level)->neighborX_SP,
-			//						para->getParD(level)->neighborY_SP,
-			//						para->getParD(level)->neighborZ_SP,
-			//						para->getParD(level)->d0SP.f[0],
-			//						para->getParD(level)->size_Mat_SP,
-			//						level,
-			//						para->getForcesDev(),
-			//						pm[1]->getPorosity(),
-			//						pm[1]->getDarcyLBM(),
-			//						pm[1]->getForchheimerLBM(),
-			//						pm[1]->getSizePM(),
-			//						pm[1]->getHostNodeIDsPM(),
-			//						para->getParD(level)->evenOrOdd);
-			 //getLastCudaError("KernelPMCumOneCompSP27 execution failed");
-			 //////////////////////////////////////////////////////////////////////////
-			 //Porous Media 2
-			 //KernelPMCumOneCompSP27(para->getParD(level)->numberofthreads,
-			//						para->getParD(level)->omega,
-			//						para->getParD(level)->neighborX_SP,
-			//						para->getParD(level)->neighborY_SP,
-			//						para->getParD(level)->neighborZ_SP,
-			//						para->getParD(level)->d0SP.f[0],
-			//						para->getParD(level)->size_Mat_SP,
-			//						level,
-			//						para->getForcesDev(),
-			//						pm[2]->getPorosity(),
-			//						pm[2]->getDarcyLBM(),
-			//						pm[2]->getForchheimerLBM(),
-			//						pm[2]->getSizePM(),
-			//						pm[2]->getHostNodeIDsPM(),
-			//						para->getParD(level)->evenOrOdd);
-			 //getLastCudaError("KernelPMCumOneCompSP27 execution failed");
-		 }
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         if (para->getDiffOn())
-         {
-            if (para->getDiffMod() == 7)
+    for( int i = 0; i < pm.size(); i++ )
+    {
+        KernelPMCumOneCompSP27(para->getParD(level)->numberofthreads,
+                               para->getParD(level)->omega,
+                               para->getParD(level)->neighborX_SP,
+                               para->getParD(level)->neighborY_SP,
+                               para->getParD(level)->neighborZ_SP,
+                               para->getParD(level)->d0SP.f[0],
+                               para->getParD(level)->size_Mat_SP,
+                               level,
+                               para->getForcesDev(),
+                               pm[i]->getPorosity(),
+                               pm[i]->getDarcyLBM(),
+                               pm[i]->getForchheimerLBM(),
+                               pm[i]->getSizePM(),
+                               pm[i]->getHostNodeIDsPM(),
+                               para->getParD(level)->evenOrOdd);
+	    getLastCudaError("KernelPMCumOneCompSP27 execution failed");
+    }
+}
+
+void collisionAdvectionDiffusion(Parameter* para, int level)
+{
+    if (para->getDiffMod() == 7)
+    {
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        // incompressible
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        //KernelADincomp7(para->getParD(level)->numberofthreads,    para->getParD(level)->diffusivity,  para->getParD(level)->geoSP, 
+        //                para->getParD(level)->neighborX_SP,       para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //                para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],      para->getParD(level)->size_Mat_SP,  
+        //                para->getParD(level)->evenOrOdd); 
+        //getLastCudaError("KernelADincomp7 execution failed");
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        // compressible
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        //KernelThS7( para->getParD(level)->numberofthreads,    para->getParD(level)->diffusivity,  para->getParD(level)->geoSP, 
+        //            para->getParD(level)->neighborX_SP,       para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //            para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],      para->getParD(level)->size_Mat_SP,  
+        //            para->getParD(level)->evenOrOdd); 
+        //getLastCudaError("KernelThS7 execution failed");
+    } 
+    else if (para->getDiffMod() == 27)
+    {
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        // incompressible
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        //KernelADincomp27( para->getParD(level)->numberofthreads,    para->getParD(level)->diffusivity,  para->getParD(level)->geoSP, 
+        //		            para->getParD(level)->neighborX_SP,       para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //		            para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],     para->getParD(level)->size_Mat_SP,  
+        //		            para->getParD(level)->evenOrOdd); 
+        //getLastCudaError("KernelADincomp27 execution failed");
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        // compressible
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        //KernelThS27(para->getParD(level)->numberofthreads,
+        //            para->getParD(level)->diffusivity, 
+        //            para->getParD(level)->geoSP, 
+        //            para->getParD(level)->neighborX_SP, 
+        //            para->getParD(level)->neighborY_SP, 
+        //            para->getParD(level)->neighborZ_SP,
+        //            para->getParD(level)->d0SP.f[0],    
+        //            para->getParD(level)->d27.f[0],    
+        //            para->getParD(level)->size_Mat_SP,  
+        //            para->getParD(level)->evenOrOdd); 
+		//getLastCudaError("KernelThS27 execution failed");
+	}
+}
+
+void exchangeMultiGPU(Parameter* para, Communicator* comm, CudaMemoryManager* cudaManager, int level)
+{
+    if (para->getNumprocs() > 1)
+	{
+        // St. Lenz: exchange for post-collision data and pre-collision data are identical!
+
+		//////////////////////////////////////////////////////////////////////////
+		//3D domain decomposition
+		exchangePostCollDataXGPU27(para, comm, cudaManager, level);
+		exchangePostCollDataYGPU27(para, comm, cudaManager, level);
+		exchangePostCollDataZGPU27(para, comm, cudaManager, level);
+
+		//////////////////////////////////////////////////////////////////////////
+		//3D domain decomposition convection diffusion
+		if (para->getDiffOn()==true)
+		{
+			exchangePostCollDataADXGPU27(para, comm, cudaManager, level);
+			exchangePostCollDataADYGPU27(para, comm, cudaManager, level);
+			exchangePostCollDataADZGPU27(para, comm, cudaManager, level);
+		}
+
+        //////////////////////////////////////////////////////////////////////////
+        // D E P R E C A T E D
+        //////////////////////////////////////////////////////////////////////////
+		
+		//////////////////////////////////////////////////////////////////////////
+		//1D domain decomposition
+		//exchangePostCollDataGPU27(para, comm, level);
+	}
+}
+
+void postCollisionBC(Parameter* para, int level, unsigned int t)
+{
+    //////////////////////////////////////////////////////////////////////////
+    // I N F L O W
+    //////////////////////////////////////////////////////////////////////////
+
+    if (para->getParD(level)->kInflowQ > 0)
+    {
+        //QVelDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
+        //           para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
+        //           para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
+        //           para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,
+        //           para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //           para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QVelDev27 execution failed");
+        
+        //QVelDevComp27( para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
+        //               para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
+        //               para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
+        //               para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,
+        //               para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //               para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QVelDevComp27 execution failed");
+
+        QVelDevCompZeroPress27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,             para->getParD(level)->ny,
+                               para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,     para->getParD(level)->Qinflow.Vz,
+                               para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,      para->getParD(level)->Qinflow.q27[0],
+                               para->getParD(level)->kInflowQ,        para->getParD(level)->Qinflow.kArray, para->getParD(level)->omega,
+                               para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP,
+                               para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        getLastCudaError("QVelDevCompZeroPress27 execution failed");
+
+        //////////////////////////////////////////////////////////////////////////
+        // D E P R E C A T E D
+        //////////////////////////////////////////////////////////////////////////
+
+        //QVelDevice1h27( para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
+        //                para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
+        //                para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
+        //                para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,          
+        //                para->getPhi(),                        para->getAngularVelocity(),
+        //                para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //                para->getParD(level)->coordX_SP,       para->getParD(level)->coordY_SP,    para->getParD(level)->coordZ_SP,
+        //                para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QVelDev27 execution failed");
+
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+    // N O - S L I P
+    //////////////////////////////////////////////////////////////////////////
+
+    if (para->getParD(level)->kQ > 0)
+    {
+        //QDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+        //	      para->getParD(level)->d0SP.f[0],             para->getParD(level)->QWall.k,      para->getParD(level)->QWall.q27[0], 
+        //	      para->getParD(level)->kQ,                    para->getParD(level)->kQ,           para->getParD(level)->omega,
+        //	      para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //	      para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QDev27 execution failed");
+        
+        //BBDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+        //         para->getParD(level)->d0SP.f[0],             para->getParD(level)->QWall.k,      para->getParD(level)->QWall.q27[0], 
+        //         para->getParD(level)->kQ,                    para->getParD(level)->kQ,           para->getParD(level)->omega,
+        //         para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //         para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+        //getLastCudaError("BBDev27 (Wall) execution failed");
+
+        //QDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+        //        para->getParD(level)->d0SP.f[0],             para->getParD(level)->QWall.k,      para->getParD(level)->QWall.q27[0], 
+        //        para->getParD(level)->kQ,                    para->getParD(level)->kQ,           para->getParD(level)->omega,
+        //        para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //        para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QDev27 (Wall) execution failed");
+
+        QDevComp27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+                   para->getParD(level)->d0SP.f[0],             para->getParD(level)->QWall.k,      para->getParD(level)->QWall.q27[0], 
+                   para->getParD(level)->kQ,                    para->getParD(level)->kQ,           para->getParD(level)->omega,
+                   para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+                   para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+        getLastCudaError("QDevComp27 (Wall) execution failed");
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+    // S L I P
+    //////////////////////////////////////////////////////////////////////////
+
+    if (para->getParD(level)->kSlipQ > 0)
+    {
+        //QSlipDev27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0],    para->getParD(level)->QSlip.k,
+        //            para->getParD(level)->QSlip.q27[0],    para->getParD(level)->kSlipQ,       para->getParD(level)->omega,
+        //            para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //            para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("Slip27 execution failed");
+
+        QSlipDevComp27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0],    para->getParD(level)->QSlip.k,
+                        para->getParD(level)->QSlip.q27[0],    para->getParD(level)->kSlipQ,       para->getParD(level)->omega,
+                        para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+                        para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        getLastCudaError("QSlipDev27 execution failed");
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+    // G E O M E T R Y
+    //////////////////////////////////////////////////////////////////////////
+
+    if (para->getParD(level)->QGeom.kQ > 0)
+    {
+		if (para->getCalcDragLift())
+		{
+			//Drag and Lift Part I
+			DragLiftPostD27(para->getParD(level)->d0SP.f[0], 
+			                para->getParD(level)->QGeom.k, 
+			                para->getParD(level)->QGeom.q27[0],
+			                para->getParD(level)->QGeom.kQ, 
+			                para->getParD(level)->DragPostX,
+			                para->getParD(level)->DragPostY,
+			                para->getParD(level)->DragPostZ,
+			                para->getParD(level)->neighborX_SP,
+			                para->getParD(level)->neighborY_SP,
+			                para->getParD(level)->neighborZ_SP,
+			                para->getParD(level)->size_Mat_SP, 
+			                para->getParD(level)->evenOrOdd,
+			                para->getParD(level)->numberofthreads);
+			getLastCudaError("DragLift27 execution failed"); 
+		}
+
+        //BBDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+        //         para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
+        //         para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
+        //         para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //         para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+        //getLastCudaError("BBDev27 (Wall) execution failed");
+
+        //QDev27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+        //		 para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
+        //		 para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
+        //		 para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //		 para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QDev27 (Geom) execution failed");
+
+        //QVelDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
+        //          para->getParD(level)->QGeom.Vx,        para->getParD(level)->QGeom.Vy,     para->getParD(level)->QGeom.Vz,
+        //          para->getParD(level)->d0SP.f[0],       para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
+        //          para->getParD(level)->QGeom.kQ,        para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
+        //          para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //          para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QVelDev27 execution failed");
+
+        //QDevComp27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+        //           para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
+        //           para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
+        //           para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //           para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QDevComp27 (Geom) execution failed");
+
+        QVelDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
+                      para->getParD(level)->QGeom.Vx,        para->getParD(level)->QGeom.Vy,     para->getParD(level)->QGeom.Vz,
+                      para->getParD(level)->d0SP.f[0],       para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
+                      para->getParD(level)->QGeom.kQ,        para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
+                      para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+                      para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        getLastCudaError("QVelDevComp27 execution failed");
+
+        //QDev3rdMomentsComp27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+        //                      para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
+        //                      para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
+        //                      para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //                      para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QDev3rdMomentsComp27 (Geom) execution failed");
+
+        //QSlipDev27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0],    para->getParD(level)->QGeom.k,
+        //            para->getParD(level)->QGeom.q27[0],    para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
+        //            para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //            para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("Slip27 execution failed");
+
+        //////////////////////////////////////////////////////////////////////////
+        // D E P R E C A T E D
+        //////////////////////////////////////////////////////////////////////////
+        // the GridGenerator does currently not provide normals!
+        
+        //QSlipGeomDevComp27(para->getParD(level)->numberofthreads,     para->getParD(level)->d0SP.f[0],           para->getParD(level)->QGeom.k,
+        //                   para->getParD(level)->QGeom.q27[0],        para->getParD(level)->QGeom.kQ,            para->getParD(level)->omega,
+        //                   para->getParD(level)->QGeomNormalX.q27[0], para->getParD(level)->QGeomNormalY.q27[0], para->getParD(level)->QGeomNormalZ.q27[0],
+        //                   para->getParD(level)->neighborX_SP,        para->getParD(level)->neighborY_SP,        para->getParD(level)->neighborZ_SP,
+        //                   para->getParD(level)->size_Mat_SP,         para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QSlipGeomDev27 execution failed");
+
+        //QSlipNormDevComp27(para->getParD(level)->numberofthreads,     para->getParD(level)->d0SP.f[0],           para->getParD(level)->QGeom.k,
+        //                   para->getParD(level)->QGeom.q27[0],        para->getParD(level)->QGeom.kQ,            para->getParD(level)->omega,
+        //                   para->getParD(level)->QGeomNormalX.q27[0], para->getParD(level)->QGeomNormalY.q27[0], para->getParD(level)->QGeomNormalZ.q27[0],
+        //                   para->getParD(level)->neighborX_SP,        para->getParD(level)->neighborY_SP,        para->getParD(level)->neighborZ_SP,
+        //                   para->getParD(level)->size_Mat_SP,         para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QSlipGeomDev27 execution failed");
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+    // O U T F L O W
+    //////////////////////////////////////////////////////////////////////////
+
+    if (para->getParD(level)->kOutflowQ > 0)
+    {
+        //////////////////////////////////////////////////////////////////////////
+        // D E P R E C A T E D
+        //////////////////////////////////////////////////////////////////////////
+
+        //QPressDevFixBackflow27( para->getParD(level)->numberofthreads,       RhoBCOutflowD,
+        //                        para->getParD(level)->d0SP.f[0],              QoutflowD.k, kOutflowQ,             para->getParD(level)->omega,
+        //                        para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //                        para->getParD(level)->size_Mat_SP,  para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QPressDev27 execution failed");
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+    // P R E S S U R E
+    //////////////////////////////////////////////////////////////////////////
+
+    if (para->getParD(level)->kPressQ > 0)
+    {
+        //QPressDev27_IntBB(  para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC,
+        //					para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,       para->getParD(level)->QPress.q27[0], 
+        //					para->getParD(level)->QPress.kQ,       para->getParD(level)->QPress.kQ,      para->getParD(level)->omega,
+        //					para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP,
+        //					para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QPressDev27_IntBB fine execution failed");
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+    // A D V E C T I O N    D I F F U S I O N
+    //////////////////////////////////////////////////////////////////////////
+
+    if (para->getDiffOn())
+    {
+        if (para->getDiffMod() == 7)
+        {
+            if (para->getParD(level)->QGeom.kQ > 0)
+            {
+                //QNoSlipADincompDev7( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+                //                     para->getParD(level)->d0SP.f[0],             para->getParD(level)->d7.f[0],      para->getParD(level)->Temp.temp,  
+                //                     para->getParD(level)->diffusivity,           para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
+                //                     para->getParD(level)->Temp.kTemp,            para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
+                //                     para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+                //                     para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+                //getLastCudaError("QNoSlipADincompDev7 execution failed");
+
+                //////////////////////////////////////////////////////////////////////////
+                // C O M P R E S S I B L E
+                //////////////////////////////////////////////////////////////////////////
+                
+                QADDev7( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+                         para->getParD(level)->d0SP.f[0],             para->getParD(level)->d7.f[0],      para->getParD(level)->Temp.temp,  
+                         para->getParD(level)->diffusivity,           para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
+                         para->getParD(level)->Temp.kTemp,            para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
+                         para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+                         para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+                getLastCudaError("QADDev27 execution failed");
+            }
+
+            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+            if (para->getParD(level)->TempVel.kTemp > 0)
+            {
+                //QADVeloIncompDev7(  para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
+                //                    para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.tempPulse, 
+                //                    para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
+                //                    para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,	para->getParD(level)->TempVel.kTemp,  
+                //                    para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	    para->getParD(level)->neighborY_SP, 
+                //                    para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                //getLastCudaError("QADVeloIncompDev7 execution failed");
+
+                //////////////////////////////////////////////////////////////////////////
+                // D E P R E C A T E D
+                //////////////////////////////////////////////////////////////////////////
+
+                //if (t<15580)//(t>500000 && t<515580)//(t>300000 && t<315580)
+                //{
+                //    QADVeloIncompDev7(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
+                //                      para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.tempPulse, 
+                //                      para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
+                //                      para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,	para->getParD(level)->TempVel.kTemp,  
+                //                      para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
+                //                      para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                //    getLastCudaError("QADVeloIncompDev7 execution failed");
+                //}
+                //else
+                //{
+                //    QADVeloIncompDev7(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
+                //                      para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.temp, 
+                //                      para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
+                //                      para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,	para->getParD(level)->TempVel.kTemp,  
+                //                      para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
+                //                      para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                //    getLastCudaError("QADVeloIncompDev7 execution failed");
+                //}
+
+                //////////////////////////////////////////////////////////////////////////
+                // C O M P R E S S I B L E
+                //////////////////////////////////////////////////////////////////////////
+                
+                QADVelDev7( para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
+                            para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.temp, 
+                            para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
+                            para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,     para->getParD(level)->TempVel.kTemp,  
+                            para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
+                            para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                getLastCudaError("QADVelDev27 execution failed");
+            }
+
+            if (para->getParD(level)->TempPress.kTemp > 0)
             {
-				//output << " Diff Mod 7\n";
-			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   // incomp
-			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion kernel
-               //KernelADincomp7(para->getParD(level)->numberofthreads,    para->getParD(level)->diffusivity,  para->getParD(level)->geoSP, 
-				//			   para->getParD(level)->neighborX_SP,       para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-				//			   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],      para->getParD(level)->size_Mat_SP,  
-				//			   para->getParD(level)->evenOrOdd); 
-			   //getLastCudaError("KernelADincomp7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion boundary condition
-               QNoSlipADincompDev7( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-									para->getParD(level)->d0SP.f[0],             para->getParD(level)->d7.f[0],      para->getParD(level)->Temp.temp,  
-									para->getParD(level)->diffusivity,           para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
-									para->getParD(level)->Temp.kTemp,            para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
-									para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-									para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-               getLastCudaError("QNoSlipADincompDev7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + velocity boundary condition
-			   if (t<15580)//(t>500000 && t<515580)//(t>300000 && t<315580)
-			   {
-                 QADVeloIncompDev7(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-								   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.tempPulse, 
-								   para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
-								   para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,	para->getParD(level)->TempVel.kTemp,  
-								   para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-								   para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-				 getLastCudaError("QADVeloIncompDev7 execution failed");
-
-			   }
-			   else
-			   {
-                 QADVeloIncompDev7(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-								   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.temp, 
-								   para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
-								   para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,	para->getParD(level)->TempVel.kTemp,  
-								   para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-								   para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-                 getLastCudaError("QADVeloIncompDev7 execution failed");
-
-			   }
-           //    QADVeloIncompDev7(  para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-								   //para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.tempPulse, 
-								   //para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
-								   //para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,	    para->getParD(level)->TempVel.kTemp,  
-								   //para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	    para->getParD(level)->neighborY_SP, 
-								   //para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-           //    getLastCudaError("QADVeloIncompDev7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + velocity boundary condition
-               QADPressIncompDev7(   para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
-									 para->getParD(level)->d0SP.f[0],        para->getParD(level)->d7.f[0],			para->getParD(level)->TempPress.temp, 
-									 para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
-									 para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp,  
-									 para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-									 para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-               getLastCudaError("QADPressIncompDev7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-			   
-
-			   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   //// comp
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion kernel
-      //         KernelThS7( para->getParD(level)->numberofthreads,    para->getParD(level)->diffusivity,  para->getParD(level)->geoSP, 
-      //                     para->getParD(level)->neighborX_SP,       para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-      //                     para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],      para->getParD(level)->size_Mat_SP,  
-      //                     para->getParD(level)->evenOrOdd); 
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion boundary condition
-      //         QADDev7( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-      //                  para->getParD(level)->d0SP.f[0],             para->getParD(level)->d7.f[0],      para->getParD(level)->Temp.temp,  
-      //                  para->getParD(level)->diffusivity,           para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
-      //                  para->getParD(level)->Temp.kTemp,            para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
-      //                  para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-      //                  para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-      //         getLastCudaError("QADDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-      //         QADVelDev7( para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-      //                     para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.temp, 
-      //                     para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
-      //                     para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,     para->getParD(level)->TempVel.kTemp,  
-      //                     para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
-      //                     para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-      //         getLastCudaError("QADVelDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-      //         QADPressDev7( para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
-      //                       para->getParD(level)->d0SP.f[0],        para->getParD(level)->d7.f[0],			para->getParD(level)->TempPress.temp, 
-      //                       para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
-      //                       para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp,   para->getParD(level)->TempPress.kTemp,  
-      //                       para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
-      //                       para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-      //         getLastCudaError("QADPressDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            } 
-            else if (para->getDiffMod() == 27)
+                //QADPressIncompDev7( para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
+                //                    para->getParD(level)->d0SP.f[0],        para->getParD(level)->d7.f[0],			para->getParD(level)->TempPress.temp, 
+                //                    para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
+                //                    para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp,  
+                //                    para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
+                //                    para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                //getLastCudaError("QADPressIncompDev7 execution failed");
+
+                //////////////////////////////////////////////////////////////////////////
+                // C O M P R E S S I B L E
+                //////////////////////////////////////////////////////////////////////////
+
+                QADPressDev7( para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
+                              para->getParD(level)->d0SP.f[0],        para->getParD(level)->d7.f[0],			para->getParD(level)->TempPress.temp, 
+                              para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
+                              para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp,   para->getParD(level)->TempPress.kTemp,  
+                              para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
+                              para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                getLastCudaError("QADPressDev27 execution failed");
+            }
+        } 
+        else if (para->getDiffMod() == 27)
+        {
+            if (para->getParD(level)->QGeom.kQ > 0)
+            {
+                //QNoSlipADincompDev27(para->getParD(level)->numberofthreads,      para->getParD(level)->nx,           para->getParD(level)->ny,
+                //                     para->getParD(level)->d0SP.f[0],            para->getParD(level)->d27.f[0],     para->getParD(level)->Temp.temp,  
+                //                     para->getParD(level)->diffusivity,          para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
+                //                     para->getParD(level)->Temp.kTemp,           para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
+                //                     para->getParD(level)->neighborX_SP,         para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+                //                     para->getParD(level)->size_Mat_SP,          para->getParD(level)->evenOrOdd);
+                //getLastCudaError("QNoSlipADincompDev27 execution failed");
+
+                //////////////////////////////////////////////////////////////////////////
+                // C O M P R E S S I B L E
+                //////////////////////////////////////////////////////////////////////////
+
+                QADBBDev27(para->getParD(level)->numberofthreads,      para->getParD(level)->nx,           para->getParD(level)->ny,
+                           para->getParD(level)->d0SP.f[0],            para->getParD(level)->d27.f[0],     para->getParD(level)->Temp.temp,  
+                           para->getParD(level)->diffusivity,          para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
+                           para->getParD(level)->Temp.kTemp,           para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
+                           para->getParD(level)->neighborX_SP,         para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+                           para->getParD(level)->size_Mat_SP,          para->getParD(level)->evenOrOdd);
+                getLastCudaError("QADBBDev27 execution failed");
+            }
+
+            if (para->getParD(level)->TempVel.kTemp > 0)
+            {
+                QADVeloIncompDev27( para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
+            	                    para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		para->getParD(level)->TempVel.temp, 
+            	                    para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
+            	                    para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,   para->getParD(level)->TempVel.kTemp,  
+            	                    para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
+            	                    para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                getLastCudaError("QADVeloIncompDev27 execution failed");
+
+                //////////////////////////////////////////////////////////////////////////
+                // D E P R E C A T E D
+                //////////////////////////////////////////////////////////////////////////
+                
+                //if (t>500000 && t<515580)//(t>300000 && t<315580)
+                //{
+                //    QADVeloIncompDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				 para->getParD(level)->ny,
+                //                       para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		 para->getParD(level)->TempVel.tempPulse, 
+                //                       para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,	 para->getParD(level)->TempVel.k,
+                //                       para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,   para->getParD(level)->TempVel.kTemp,  
+                //                       para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	 para->getParD(level)->neighborY_SP, 
+                //                       para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,	 para->getParD(level)->evenOrOdd);
+                //    getLastCudaError("QADVeloIncompDev27 execution failed");
+                //}
+                //else
+                //{
+                //    QADVeloIncompDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
+                //                       para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		para->getParD(level)->TempVel.temp, 
+                //                       para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,	para->getParD(level)->TempVel.k,
+                //                       para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,  para->getParD(level)->TempVel.kTemp,  
+                //                       para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
+                //                       para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,	para->getParD(level)->evenOrOdd);
+                //    getLastCudaError("QADVeloIncompDev27 execution failed");
+                //}
+
+                //////////////////////////////////////////////////////////////////////////
+                // C O M P R E S S I B L E
+                //////////////////////////////////////////////////////////////////////////
+                
+                QADVelDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
+                 	        para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		    para->getParD(level)->TempVel.tempPulse, 
+                 	        para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->Qinflow.k,
+                 	        para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->kInflowQ,         para->getParD(level)->kInflowQ,  
+                 	        para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,     para->getParD(level)->neighborY_SP, 
+                 	        para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                getLastCudaError("QADVelDev27 execution failed");
+
+                //////////////////////////////////////////////////////////////////////////
+                // D E P R E C A T E D
+                //////////////////////////////////////////////////////////////////////////
+
+                //if (t<1000)//(t>100000 && t<103895)//(t>1600000 && t<1662317)//(t>500000 && t<515580)//(t<1000)//(t<15580)//(t>400000 && t<415580)//
+                //{
+                //    QADVelDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
+                // 	              para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		    para->getParD(level)->TempVel.tempPulse, 
+                // 	              para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->Qinflow.k,
+                // 	              para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->kInflowQ,         para->getParD(level)->kInflowQ,  
+                // 	              para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,     para->getParD(level)->neighborY_SP, 
+                // 	              para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                //    getLastCudaError("QADVelDev27 execution failed");
+                //}
+                //else
+                //{
+                //    QADVelDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
+                //                para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		    para->getParD(level)->TempVel.temp, 
+                //                para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->Qinflow.k,
+                //                para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->kInflowQ,         para->getParD(level)->kInflowQ,  
+                //                para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	    para->getParD(level)->neighborY_SP, 
+                //                para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                //    getLastCudaError("QADVelDev27 execution failed");
+                //}
+            }
+
+            if (para->getParD(level)->TempPress.kTemp > 0)
             {
-			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   // incomp
-			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion kernel
-      //         KernelADincomp27( para->getParD(level)->numberofthreads,    para->getParD(level)->diffusivity,  para->getParD(level)->geoSP, 
-						//		   para->getParD(level)->neighborX_SP,       para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-						//		   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],     para->getParD(level)->size_Mat_SP,  
-						//		   para->getParD(level)->evenOrOdd); 
-			   //getLastCudaError("KernelADincomp27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion boundary condition
-      //         QNoSlipADincompDev27(para->getParD(level)->numberofthreads,      para->getParD(level)->nx,           para->getParD(level)->ny,
-						//			  para->getParD(level)->d0SP.f[0],            para->getParD(level)->d27.f[0],     para->getParD(level)->Temp.temp,  
-						//			  para->getParD(level)->diffusivity,          para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
-						//			  para->getParD(level)->Temp.kTemp,           para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
-						//			  para->getParD(level)->neighborX_SP,         para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-						//			  para->getParD(level)->size_Mat_SP,          para->getParD(level)->evenOrOdd);
-      //         getLastCudaError("QNoSlipADincompDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-			   //if (t>500000 && t<515580)//(t>300000 && t<315580)
-			   //{
-				   //QADVeloIncompDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				 para->getParD(level)->ny,
-							//		    para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		 para->getParD(level)->TempVel.tempPulse, 
-							//		    para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,	 para->getParD(level)->TempVel.k,
-							//		    para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,   para->getParD(level)->TempVel.kTemp,  
-							//		    para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	 para->getParD(level)->neighborY_SP, 
-							//		    para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,	 para->getParD(level)->evenOrOdd);
-				   //getLastCudaError("QADVeloIncompDev27 execution failed");
-			   //}
-			   //else
-			   //{
-				  // QADVeloIncompDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-						//			    para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		para->getParD(level)->TempVel.temp, 
-						//			    para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,	para->getParD(level)->TempVel.k,
-						//			    para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,  para->getParD(level)->TempVel.kTemp,  
-						//			    para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-						//			    para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,	para->getParD(level)->evenOrOdd);
-				  // getLastCudaError("QADVeloIncompDev27 execution failed");
-			   //}
-      //     //    QADVeloIncompDev27( para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-						//		     //para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		para->getParD(level)->TempVel.temp, 
-						//		     //para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
-						//		     //para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,   para->getParD(level)->TempVel.kTemp,  
-						//		     //para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-						//		     //para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-      //     //    getLastCudaError("QADVeloIncompDev27 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + pressure boundary condition
-           //    QADPressIncompDev27(   para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
-									  //para->getParD(level)->d0SP.f[0],        para->getParD(level)->d27.f[0],			para->getParD(level)->TempPress.temp, 
-									  //para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
-									  //para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp,  para->getParD(level)->TempPress.kTemp,  
-									  //para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
-									  //para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-           //    getLastCudaError("QADPressIncompDev27 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-			   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   //// comp
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion kernel
-               //KernelThS27(para->getParD(level)->numberofthreads,
-               //            para->getParD(level)->diffusivity, 
-               //            para->getParD(level)->geoSP, 
-               //            para->getParD(level)->neighborX_SP, 
-               //            para->getParD(level)->neighborY_SP, 
-               //            para->getParD(level)->neighborZ_SP,
-               //            para->getParD(level)->d0SP.f[0],    
-               //            para->getParD(level)->d27.f[0],    
-               //            para->getParD(level)->size_Mat_SP,  
-               //            para->getParD(level)->evenOrOdd); 
-               //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion boundary condition
-               QADBBDev27(para->getParD(level)->numberofthreads,      para->getParD(level)->nx,           para->getParD(level)->ny,
-                          para->getParD(level)->d0SP.f[0],            para->getParD(level)->d27.f[0],     para->getParD(level)->Temp.temp,  
-                          para->getParD(level)->diffusivity,          para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
-                          para->getParD(level)->Temp.kTemp,           para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
-                          para->getParD(level)->neighborX_SP,         para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-                          para->getParD(level)->size_Mat_SP,          para->getParD(level)->evenOrOdd);
-               getLastCudaError("QADBBDev27 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //Street Manhattan - never use again, please
-               QADDirichletDev27( para->getParD(level)->numberofthreads,      para->getParD(level)->nx,					para->getParD(level)->ny,
-								  para->getParD(level)->d0SP.f[0],            para->getParD(level)->d27.f[0],			para->getParD(level)->TempVel.tempPulse,  
-								  para->getParD(level)->diffusivity,          para->getParD(level)->concIndex,			para->getParD(level)->QGeom.q27[0], 
-								  para->getParD(level)->numberOfPointsConc,   para->getParD(level)->numberOfPointsConc, para->getParD(level)->omega,
-								  para->getParD(level)->neighborX_SP,         para->getParD(level)->neighborY_SP,		para->getParD(level)->neighborZ_SP,
-								  para->getParD(level)->size_Mat_SP,          para->getParD(level)->evenOrOdd);
-               getLastCudaError("QADDirichletDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-			   //if (t<1000)//(t>100000 && t<103895)//(t>1600000 && t<1662317)//(t>500000 && t<515580)//(t<1000)//(t<15580)//(t>400000 && t<415580)//
-			   //{
-				  // QADVelDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-						//	   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		para->getParD(level)->TempVel.tempPulse, 
-						//	   para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->Qinflow.k,
-						//	   para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,  
-						//	   para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-						//	   para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-				  // getLastCudaError("QADVelDev27 execution failed");
-			   //}
-			   //else
-			   //{
-				  // QADVelDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-						//	   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		para->getParD(level)->TempVel.temp, 
-						//	   para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->Qinflow.k,
-						//	   para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,  
-						//	   para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-						//	   para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-				  // getLastCudaError("QADVelDev27 execution failed");
-			   //}
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-      //         //QADPressDev27( para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
-      //         //               para->getParD(level)->d0SP.f[0],        para->getParD(level)->d27.f[0],			para->getParD(level)->TempPress.temp, 
-      //         //               para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
-      //         //               para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp,  para->getParD(level)->TempPress.kTemp,  
-      //         //               para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
-      //         //               para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-      //         //getLastCudaError("QADPressDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+                //QADPressIncompDev27( para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
+                //                     para->getParD(level)->d0SP.f[0],        para->getParD(level)->d27.f[0],			para->getParD(level)->TempPress.temp, 
+                //                     para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
+                //                     para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp,  para->getParD(level)->TempPress.kTemp,  
+                //                     para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
+                //                     para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                //getLastCudaError("QADPressIncompDev27 execution failed");
+
+                //////////////////////////////////////////////////////////////////////////
+                // C O M P R E S S I B L E
+                //////////////////////////////////////////////////////////////////////////
+                
+                QADPressDev27( para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
+                               para->getParD(level)->d0SP.f[0],        para->getParD(level)->d27.f[0],			para->getParD(level)->TempPress.temp, 
+                               para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
+                               para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp,  para->getParD(level)->TempPress.kTemp,  
+                               para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
+                               para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
+                getLastCudaError("QADPressDev27 execution failed");
+            
             }
-         }
+        }
+    }
+}
+
+void swapBetweenEvenAndOddTimestep(Parameter* para, int level)
+{
+    if (para->getParD(level)->evenOrOdd==true)  para->getParD(level)->evenOrOdd=false;
+    else                                        para->getParD(level)->evenOrOdd=true;
+}
+
+void calcMacroscopicQuantities(Parameter* para, int level)
+{
+    CalcMacCompSP27(para->getParD(level)->vx_SP,       
+                    para->getParD(level)->vy_SP,        
+                    para->getParD(level)->vz_SP,        
+                    para->getParD(level)->rho_SP, 
+                    para->getParD(level)->press_SP, 
+                    para->getParD(level)->geoSP,       
+                    para->getParD(level)->neighborX_SP, 
+                    para->getParD(level)->neighborY_SP, 
+                    para->getParD(level)->neighborZ_SP,
+                    para->getParD(level)->size_Mat_SP,
+                    para->getParD(level)->numberofthreads,       
+                    para->getParD(level)->d0SP.f[0],    
+                    para->getParD(level)->evenOrOdd);
+    getLastCudaError("CalcMacSP27 execution failed"); 
+}
+
+void preCollisionBC(Parameter* para, CudaMemoryManager* cudaManager, int level, unsigned int t)
+{
+    //////////////////////////////////////////////////////////////////////////
+    // I N F L O W
+    //////////////////////////////////////////////////////////////////////////
+
+	if (para->getParD(level)->kInflowQ > 0)
+	{
+		//if (  myid == 0)
+		//{
+		//    VelSchlaffer27(para->getParD(level)->numberofthreads, t,
+		//                   para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.Vz, 
+		//                   para->getParD(level)->Qinflow.deltaVz, para->getParD(level)->Qinflow.k,  
+		//                   para->getParD(level)->Qinflow.kN,      para->getParD(level)->kInflowQ, 
+		//                   para->getParD(level)->omega,           para->getParD(level)->neighborX_SP, 
+		//                   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+		//                   para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+		//    getLastCudaError("VelSchlaffer27 execution failed");
+		//}
 		//////////////////////////////////////////////////////////////////////////////
-		if (para->getNumprocs() > 1)
+		// high viscosity incompressible
+		//QVelDevIncompHighNu27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
+		//                      para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
+		//                      para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
+		//                      para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,
+		//                      para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+		//                      para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+		//getLastCudaError("QVelDevComp27 execution failed");
+		//////////////////////////////////////////////////////////////////////////////
+		// high viscosity compressible
+		//QVelDevCompHighNu27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
+        //                    para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
+        //                    para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
+        //                    para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,
+        //                    para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //                    para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QVelDevComp27 execution failed");
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// G E O M E T R Y
+	//////////////////////////////////////////////////////////////////////////
+
+	if (para->getParD(level)->QGeom.kQ > 0)
+	{
+		if (para->getCalcDragLift())
 		{
-			////1D domain decomposition
-			//exchangePostCollDataGPU27(para, comm, level);
-			//3D domain decomposition
-			//printf("start exchange Post X (level: %d, myID: %d) \n", level, para->getMyID());
-			exchangePostCollDataXGPU27(para, comm, cudaManager, level);
-			//printf("end exchange Post X (level: %d, myID: %d) \n", level, para->getMyID());
-			//printf("start exchange Post Y (level: %d, myID: %d) \n", level, para->getMyID());
-			exchangePostCollDataYGPU27(para, comm, cudaManager, level);
-			//printf("end exchange Post Y (level: %d, myID: %d) \n", level, para->getMyID());
-			//printf("start exchange Post Z (level: %d, myID: %d) \n", level, para->getMyID());
-			exchangePostCollDataZGPU27(para, comm, cudaManager, level);
-			//printf("end exchange Post Z (level: %d, myID: %d) \n", level, para->getMyID());
-			//////////////////////////////////////////////////////////////////////////
-			//3D domain decomposition convection diffusion
-			if (para->getDiffOn()==true)
+			//Drag and Lift Part II
+			DragLiftPreD27(para->getParD(level)->d0SP.f[0], 
+			               para->getParD(level)->QGeom.k, 
+			               para->getParD(level)->QGeom.q27[0],
+			               para->getParD(level)->QGeom.kQ, 
+			               para->getParD(level)->DragPreX,
+			               para->getParD(level)->DragPreY,
+			               para->getParD(level)->DragPreZ,
+			               para->getParD(level)->neighborX_SP,
+			               para->getParD(level)->neighborY_SP,
+			               para->getParD(level)->neighborZ_SP,
+			               para->getParD(level)->size_Mat_SP, 
+			               para->getParD(level)->evenOrOdd,
+			               para->getParD(level)->numberofthreads);
+			getLastCudaError("DragLift27 execution failed"); 
+			////////////////////////////////////////////////////////////////////////////////
+			//Calculation of Drag and Lift
+			////////////////////////////////////////////////////////////////////////////////
+			calcDragLift(para, cudaManager, level);
+			////////////////////////////////////////////////////////////////////////////////
+		}
+
+		if (para->getCalcCp())
+		{
+			////////////////////////////////////////////////////////////////////////////////
+			//Calculation of cp
+			////////////////////////////////////////////////////////////////////////////////
+
+			if(t > para->getTStartOut())
 			{
-				exchangePostCollDataADXGPU27(para, comm, cudaManager, level);
-				exchangePostCollDataADYGPU27(para, comm, cudaManager, level);
-				exchangePostCollDataADZGPU27(para, comm, cudaManager, level);
+                ////////////////////////////////////////////////////////////////////////////////
+                CalcCPtop27(para->getParD(level)->d0SP.f[0], 
+                            para->getParD(level)->cpTopIndex, 
+                            para->getParD(level)->numberOfPointsCpTop, 
+                            para->getParD(level)->cpPressTop,
+                            para->getParD(level)->neighborX_SP,
+                            para->getParD(level)->neighborY_SP,
+                            para->getParD(level)->neighborZ_SP,
+                            para->getParD(level)->size_Mat_SP, 
+                            para->getParD(level)->evenOrOdd,
+                            para->getParD(level)->numberofthreads);
+                //////////////////////////////////////////////////////////////////////////////////
+                CalcCPbottom27(para->getParD(level)->d0SP.f[0],
+                               para->getParD(level)->cpBottomIndex, 
+                               para->getParD(level)->numberOfPointsCpBottom, 
+                               para->getParD(level)->cpPressBottom,
+                               para->getParD(level)->neighborX_SP,
+                               para->getParD(level)->neighborY_SP,
+                               para->getParD(level)->neighborZ_SP,
+                               para->getParD(level)->size_Mat_SP, 
+                               para->getParD(level)->evenOrOdd,
+                               para->getParD(level)->numberofthreads);
+                //////////////////////////////////////////////////////////////////////////////////
+                CalcCPbottom27(para->getParD(level)->d0SP.f[0],
+                               para->getParD(level)->cpBottom2Index, 
+                               para->getParD(level)->numberOfPointsCpBottom2, 
+                               para->getParD(level)->cpPressBottom2,
+                               para->getParD(level)->neighborX_SP,
+                               para->getParD(level)->neighborY_SP,
+                               para->getParD(level)->neighborZ_SP,
+                               para->getParD(level)->size_Mat_SP, 
+                               para->getParD(level)->evenOrOdd,
+                               para->getParD(level)->numberofthreads);
+                //////////////////////////////////////////////////////////////////////////////////
+                calcCp(para, cudaManager, level);
 			}
 		}
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //QPressDevFixBackflow27( para->getParD(level)->numberofthreads,       RhoBCOutflowD,
-         //                        para->getParD(level)->d0SP.f[0],    QoutflowD.k, kOutflowQ,             para->getParD(level)->omega,
-         //                        para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-         //                        para->getParD(level)->size_Mat_SP,  para->getParD(level)->evenOrOdd);
-         //getLastCudaError("QPressDev27 execution failed");
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//QPressDev27_IntBB(  para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC,
-		//					para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,       para->getParD(level)->QPress.q27[0], 
-		//					para->getParD(level)->QPress.kQ,       para->getParD(level)->QPress.kQ,      para->getParD(level)->omega,
-		//					para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP,
-		//					para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		//getLastCudaError("QPressDev27_IntBB fine execution failed");
-		 //QPressDevOld27( para->getParD(level)->numberofthreads, para->getParD(level)->QpressX1.RhoBC, 
-			//			 para->getParD(level)->d0SP.f[0],       para->getParD(level)->QpressX1.k,  
-			//			 para->getParD(level)->QpressX1.kN,     para->getParD(level)->QpressX1.kQ,  para->getParD(level)->omega,
-			//			 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//			 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		 //getLastCudaError("QPressDev27 execution failed");
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//if (para->getParD(level)->kSlipQ > 0)
-			//{
-			//	QSlipDevComp27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0],    para->getParD(level)->QSlip.k,
-			//					para->getParD(level)->QSlip.q27[0],    para->getParD(level)->kSlipQ,       para->getParD(level)->omega,
-			//					para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//					para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-			//	getLastCudaError("QSlipDev27 execution failed");
-			//	//QSlipDev27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0],    para->getParD(level)->QSlip.k,
-			//	//			 para->getParD(level)->QSlip.q27[0],    para->getParD(level)->kSlipQ,       para->getParD(level)->omega,
-			//	//			 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//	//			 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-			//	//getLastCudaError("Slip27 execution failed");
-			//	//QSlipDev27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0],    para->getParD(level)->QGeom.k,
-			//	//			 para->getParD(level)->QGeom.q27[0],    para->getParD(level)->QGeom.kQ,       para->getParD(level)->omega,
-			//	//			 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//	//			 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-			//	//getLastCudaError("Slip27 execution failed");
-			//}
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 // printf("fein vor WallBC\n");
-		 //QDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-			//	 para->getParD(level)->d0SP.f[0],             para->getParD(level)->QWall.k,      para->getParD(level)->QWall.q27[0], 
-			//	 para->getParD(level)->kQ,                    para->getParD(level)->kQ,           para->getParD(level)->omega,
-			//	 para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//	 para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-		 //getLastCudaError("QDev27 execution failed");
-		  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		  // printf("fein vor WallBC\n");
-       //   BBDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-       //            para->getParD(level)->d0SP.f[0],             para->getParD(level)->QWall.k,      para->getParD(level)->QWall.q27[0], 
-				   //para->getParD(level)->kQ,                    para->getParD(level)->kQ,           para->getParD(level)->omega,
-       //            para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-       //            para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-       //   getLastCudaError("BBDev27 (Wall) execution failed");
-		 //QDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-			//	 para->getParD(level)->d0SP.f[0],             para->getParD(level)->QWall.k,      para->getParD(level)->QWall.q27[0], 
-			//	 para->getParD(level)->kQ,                    para->getParD(level)->kQ,           para->getParD(level)->omega,
-			//	 para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//	 para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-		 //getLastCudaError("QDev27 (Wall) execution failed");
-			//QDevComp27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-			//	       para->getParD(level)->d0SP.f[0],             para->getParD(level)->QWall.k,      para->getParD(level)->QWall.q27[0], 
-			//	       para->getParD(level)->kQ,                    para->getParD(level)->kQ,           para->getParD(level)->omega,
-			//	       para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//	       para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-			//getLastCudaError("QDevComp27 (Wall) execution failed");
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		      //QVelDevice1h27(   para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-								//para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-								//para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-								//para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,          
-								//para->getPhi(),                        para->getAngularVelocity(),
-								//para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-								//para->getParD(level)->coordX_SP,       para->getParD(level)->coordY_SP,    para->getParD(level)->coordZ_SP,
-								//para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		      //getLastCudaError("QVelDev27 execution failed");
-			  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 //???????????????????????????????
-      //      QVelDev27(  para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-      //                  para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-      //                  para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-						//para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,
-      //                  para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-      //                  para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-      //      getLastCudaError("QVelDev27 execution failed");
-			  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//QVelDevComp27(  para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-			//				para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-			//				para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-			//				para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,
-			//				para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//				para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-			//getLastCudaError("QVelDevComp27 execution failed");
-
-        if (para->getParD(level)->kInflowQ > 0)
+
+
+		////////////////////////////////////////////////////////////////////////////////
+		// high viscosity incompressible
+		//QDevIncompHighNu27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+		//                    para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
+		//                    para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
+		//                    para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+		//                    para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+		//getLastCudaError("QDevComp27 (Geom) execution failed");
+		//////////////////////////////////////////////////////////////////////////////////
+		// high viscosity compressible
+		//QDevCompHighNu27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
+		//                  para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
+		//                  para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
+		//                  para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+		//                  para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
+		//getLastCudaError("QDevComp27 (Geom) execution failed");
+	}
+
+    //////////////////////////////////////////////////////////////////////////
+    // P R E S S U R E
+    //////////////////////////////////////////////////////////////////////////
+
+	if (para->getParD(level)->QPress.kQ > 0)
+	{
+		QPressNoRhoDev27(para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC,
+		                 para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,
+		                 para->getParD(level)->QPress.kN,       para->getParD(level)->QPress.kQ,     para->getParD(level)->omega,
+		                 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP,  para->getParD(level)->neighborZ_SP,
+		                 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+		getLastCudaError("QPressNoRhoDev27 execution failed");
+
+		//QPressDevEQZ27(para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, 
+		//               para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,  
+		//               para->getParD(level)->QPress.kN,       para->getParD(level)->kDistTestRE.f[0],       
+		//               para->getParD(level)->QPress.kQ,       para->getParD(level)->omega,
+		//               para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(0)->neighborZ_SP,
+		//               para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+		//getLastCudaError("QPressDevEQZ27 execution failed");
+
+		//QInflowScaleByPressDev27( para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, 
+		//                          para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,  
+		//                          para->getParD(level)->QPress.kN,       para->getParD(level)->QPress.kQ,    para->getParD(0)->omega,
+		//                          para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(0)->neighborZ_SP,
+		//                          para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+		//getLastCudaError("QInflowScaleByPressDev27 execution failed");
+
+		////////////////////////////////////////////////////////////////////////////////
+        //press NEQ incompressible
+        //QPressDevIncompNEQ27(para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, 
+        //                     para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,  
+        //                     para->getParD(level)->QPress.kN,       para->getParD(level)->QPress.kQ,    para->getParD(level)->omega,
+        //                     para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //                     para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QPressDevIncompNEQ27 execution failed");
+        //////////////////////////////////////////////////////////////////////////////////
+        //press NEQ compressible
+        //QPressDevNEQ27( para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, 
+        //                para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,  
+        //                para->getParD(level)->QPress.kN,       para->getParD(level)->QPress.kQ,    para->getParD(level)->omega,
+        //                para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
+        //                para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QPressDevNEQ27 execution failed");
+
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+    // O U T F L O W
+    //////////////////////////////////////////////////////////////////////////
+
+	if (para->getParD(level)->kOutflowQ > 0)
+	{
+		//QPressNoRhoDev27( para->getParD(level)->numberofthreads, para->getParD(level)->Qoutflow.RhoBC, 
+		//                  para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qoutflow.k,  
+		//                  para->getParD(level)->Qoutflow.kN,     para->getParD(level)->Qoutflow.kQ,    para->getParD(level)->omega,
+		//                  para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP,
+		//                  para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+		//getLastCudaError("QPressNoRhoDev27 execution failed");
+
+		//if (  myid == numprocs - 1)  
+		//PressSchlaffer27( para->getParD(level)->numberofthreads,  para->getParD(level)->Qoutflow.RhoBC,
+		//                  para->getParD(level)->d0SP.f[0],        para->getParD(level)->Qoutflow.Vx, 
+		//                  para->getParD(level)->Qoutflow.Vy,      para->getParD(level)->Qoutflow.Vz, 
+		//                  para->getParD(level)->Qoutflow.deltaVz, para->getParD(level)->Qoutflow.k,  
+		//                  para->getParD(level)->Qoutflow.kN,      para->getParD(level)->kOutflowQ,                      
+		//                  para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,    
+		//                  para->getParD(level)->neighborY_SP,     para->getParD(level)->neighborZ_SP,
+		//                  para->getParD(level)->size_Mat_SP,      para->getParD(level)->evenOrOdd);
+		//getLastCudaError("PressSchlaffer27 execution failed");
+	}
+
+    //////////////////////////////////////////////////////////////////////////////////
+    ////only for a round off error test
+    //para->cudaCopyTestREtoHost(0,para->getParH(0)->QPress.kQ);
+    //printRE(para, t);
+    //////////////////////////////////////////////////////////////////////////////////
+
+
+}
+
+void fineToCoarse(Parameter* para, int level)
+{
+    //ScaleFC_comp_D3Q27F3(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],     para->getParD(level)->g6.g[0],
+    //                     para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+    //                     para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+    //                     para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //                     para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+    //                     para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega,
+    //                     para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny,
+    //                     para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //                     para->getParD(level)->offFC);
+    //getLastCudaError("ScaleFC_comp_D3Q27F3 execution failed");
+
+	//ScaleFC_0817_comp_27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],
+	//                     para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+	//                     para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+	//                     para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+	//                     para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+	//                     para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega,
+	//                     para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny,
+	//                     para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+	//                     para->getParD(level)->offFC);
+    //getLastCudaError("ScaleFC_0817_comp_27 execution failed");
+
+	//ScaleFC_RhoSq_3rdMom_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
+	//	                            para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+	//	                            para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+	//	                            para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+	//	                            para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+	//	                            para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+	//	                            para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+	//	                            para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+	//	                            para->getParD(level)->offFC);
+    //getLastCudaError("ScaleFC_RhoSq_3rdMom_comp_27 execution failed");
+
+	ScaleFC_RhoSq_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
+							para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+							para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+							para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+							para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+							para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+							para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+							para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+							para->getParD(level)->offFC);
+    getLastCudaError("ScaleFC27_RhoSq_comp execution failed");
+
+	//ScaleFC_AA2016_comp_27( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
+    //                        para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+    //                        para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+    //                        para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //                        para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+    //                        para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+    //                        para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+    //                        para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //                        para->getParD(level)->offFC);
+    //getLastCudaError("ScaleFC_AA2016_comp_27 execution failed");
+
+
+
+    //////////////////////////////////////////////////////////////////////////
+    // D E P R E C A T E D
+    //////////////////////////////////////////////////////////////////////////
+
+    //ScaleFC27(  para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
+    //            para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP, 
+    //            para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP, para->getParD(level+1)->neighborZ_SP, 
+    //            para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,  para->getParD(level)->evenOrOdd,
+    //            para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+    //            para->getParD(level)->K_FC,           para->getParD(level)->omega,          para->getParD(level+1)->omega, 
+    //            para->getParD(level)->vis,            para->getParD(level)->nx,             para->getParD(level)->ny, 
+    //            para->getParD(level+1)->nx,           para->getParD(level+1)->ny,           para->getParD(level)->gridNX);
+    //getLastCudaError("ScaleFC27 execution failed");
+
+	//ScaleFCEff27(  para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
+	//               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+	//               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+	//               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+	//               para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+	//               para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+	//               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+	//               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+	//               para->getParD(level)->offFC);
+	//getLastCudaError("ScaleFC27 execution failed");
+
+	//ScaleFCLast27( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
+	//               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+	//               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+	//               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+	//               para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+	//               para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+	//               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+	//               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+	//               para->getParD(level)->offFC);
+	//getLastCudaError("ScaleFC27 execution failed");
+
+	//ScaleFCpress27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
+	//               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+	//               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+	//               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+	//               para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+	//               para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+	//               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+	//               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+	//               para->getParD(level)->offFC);
+	//getLastCudaError("ScaleFC27 execution failed");
+
+	// ScaleFC_Fix_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
+	//                      para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+	//                      para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+	//                      para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+	//                      para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+	//                      para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+	//                      para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+	//                      para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+	//                      para->getParD(level)->offFC);
+	// getLastCudaError("ScaleFC27 execution failed");
+
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// incompressible
+	//ScaleFC_Fix_27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
+	//               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+	//               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+	//               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+	//               para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+	//               para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+	//               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+	//               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+	//               para->getParD(level)->offFC);
+	//getLastCudaError("ScaleFC27 execution failed");
+
+	//ScaleFC_NSPress_27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
+	//                   para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+	//                   para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+	//                   para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+	//                   para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+	//                   para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+	//                   para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+	//                   para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+	//                   para->getParD(level)->offFC);
+	//getLastCudaError("ScaleFC27 execution failed");
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// A D V E C T I O N    D I F F U S I O N
+	//////////////////////////////////////////////////////////////////////////
+
+    if (para->getDiffOn())
+    {
+        if (para->getDiffMod() == 7)
         {
-            QVelDevCompZeroPress27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny,
-                para->getParD(level)->Qinflow.Vx, para->getParD(level)->Qinflow.Vy, para->getParD(level)->Qinflow.Vz,
-                para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.k, para->getParD(level)->Qinflow.q27[0],
-                para->getParD(level)->kInflowQ, para->getParD(level)->Qinflow.kArray, para->getParD(level)->omega,
-                para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-                para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd);
-            getLastCudaError("QVelDevCompZeroPress27 execution failed");
+            //ScaleFCThS7(   para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],
+            //               para->getParD(level)->d7.f[0],        para->getParD(level+1)->d7.f[0],
+            //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+            //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+            //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+            //               para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+            //               para->getParD(level)->K_FC,
+            //               para->getParD(level)->vis,            para->getParD(level)->diffusivity,     para->getParD(level)->numberofthreads);
+            //getLastCudaError("ScaleFCTh7 execution failed");
+            
+            ScaleFCThSMG7( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],
+                           para->getParD(level)->d7.f[0],        para->getParD(level+1)->d7.f[0],
+                           para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+                           para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+                           para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+                           para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+                           para->getParD(level)->K_FC,
+                           para->getParD(level)->vis,            para->getParD(level)->diffusivity,     para->getParD(level)->numberofthreads,
+                           para->getParD(level)->offFC);
+            getLastCudaError("ScaleFCTh7 execution failed");
+        } 
+        else if (para->getDiffMod() == 27)
+        {            
+            ScaleFCThS27( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],
+                          para->getParD(level)->d27.f[0],       para->getParD(level+1)->d27.f[0],
+                          para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
+                          para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
+                          para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+                          para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
+                          para->getParD(level)->K_FC,
+                          para->getParD(level)->vis,            para->getParD(level)->diffusivity,     para->getParD(level)->numberofthreads,
+                          para->getParD(level)->offFC);
+            getLastCudaError("ScaleFCTh27 execution failed");
         }
-			//QVelDevCompZeroPress27(  para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-			//						 para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-			//						 para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-			//						 para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,
-			//						 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//						 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-			//getLastCudaError("QVelDevCompZeroPress27 execution failed");
-
-		//  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//////Drag and Lift Part I
-		//DragLiftPostD27( para->getParD(level)->d0SP.f[0], 
-		//				 para->getParD(level)->QGeom.k, 
-		//				 para->getParD(level)->QGeom.q27[0],
-		//				 para->getParD(level)->QGeom.kQ, 
-		//				 para->getParD(level)->DragPostX,
-		//				 para->getParD(level)->DragPostY,
-		//				 para->getParD(level)->DragPostZ,
-		//				 para->getParD(level)->neighborX_SP,
-		//				 para->getParD(level)->neighborY_SP,
-		//				 para->getParD(level)->neighborZ_SP,
-		//				 para->getParD(level)->size_Mat_SP, 
-		//				 para->getParD(level)->evenOrOdd,
-		//				 para->getParD(level)->numberofthreads);
-		//getLastCudaError("DragLift27 execution failed"); 
-		//  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-       //   BBDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-       //            para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-				   //para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-       //            para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-       //            para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-       //   getLastCudaError("BBDev27 (Wall) execution failed");
-		  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		  //Sphere
-		  //QDev27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-		  //		 para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-		  //		 para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-		  //		 para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-		  //		 para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-		  //getLastCudaError("QDev27 (Geom) execution failed");
-
-		 if (para->getParD(level)->QGeom.kQ > 0)
-		 {
-			//  QDevComp27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-		 // 				 para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-		 // 				 para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-		 // 				 para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-		 // 				 para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-			//  getLastCudaError("QDevComp27 (Geom) execution failed");
-			//  //QDev3rdMomentsComp27(  para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-		 // 	//						 para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-		 // 	//						 para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-		 // 	//						 para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-		 // 	//						 para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-			//  //getLastCudaError("QDev3rdMomentsComp27 (Geom) execution failed");
-		 //  //   QVelDevCompZeroPress27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-			//		//				 para->getParD(level)->QGeom.Vx,        para->getParD(level)->QGeom.Vy,     para->getParD(level)->QGeom.Vz,
-			//		//				 para->getParD(level)->d0SP.f[0],       para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-			//		//				 para->getParD(level)->QGeom.kQ,        para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-			//		//				 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//		//				 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		 //  //   getLastCudaError("QVelDevCompZeroPress27 execution failed");
-		      QDevComp27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-		  			     para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-		  			     para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-		  			     para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-		  			     para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-		      getLastCudaError("QDevComp27 (Geom) execution failed");
-		 }
-
-		  //QSlipGeomDevComp27(para->getParD(level)->numberofthreads,     para->getParD(level)->d0SP.f[0],           para->getParD(level)->QGeom.k,
-				//			 para->getParD(level)->QGeom.q27[0],        para->getParD(level)->QGeom.kQ,            para->getParD(level)->omega,
-				//			 para->getParD(level)->QGeomNormalX.q27[0], para->getParD(level)->QGeomNormalY.q27[0], para->getParD(level)->QGeomNormalZ.q27[0],
-				//			 para->getParD(level)->neighborX_SP,        para->getParD(level)->neighborY_SP,        para->getParD(level)->neighborZ_SP,
-				//			 para->getParD(level)->size_Mat_SP,         para->getParD(level)->evenOrOdd);
-		  //getLastCudaError("QSlipGeomDev27 execution failed");
-
-		  //QSlipNormDevComp27(para->getParD(level)->numberofthreads,     para->getParD(level)->d0SP.f[0],           para->getParD(level)->QGeom.k,
-				//			 para->getParD(level)->QGeom.q27[0],        para->getParD(level)->QGeom.kQ,            para->getParD(level)->omega,
-				//			 para->getParD(level)->QGeomNormalX.q27[0], para->getParD(level)->QGeomNormalY.q27[0], para->getParD(level)->QGeomNormalZ.q27[0],
-				//			 para->getParD(level)->neighborX_SP,        para->getParD(level)->neighborY_SP,        para->getParD(level)->neighborZ_SP,
-				//			 para->getParD(level)->size_Mat_SP,         para->getParD(level)->evenOrOdd);
-		  //getLastCudaError("QSlipGeomDev27 execution failed");
-
-		  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		  //Car
-		  //QVelDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-		  //          para->getParD(level)->QGeom.Vx,        para->getParD(level)->QGeom.Vy,     para->getParD(level)->QGeom.Vz,
-		  //          para->getParD(level)->d0SP.f[0],       para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-				//	para->getParD(level)->QGeom.kQ,        para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-		  //          para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-		  //          para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		  //getLastCudaError("QVelDev27 execution failed");
-
-		     // QVelDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-							//para->getParD(level)->QGeom.Vx,        para->getParD(level)->QGeom.Vy,     para->getParD(level)->QGeom.Vz,
-							//para->getParD(level)->d0SP.f[0],       para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-							//para->getParD(level)->QGeom.kQ,        para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-							//para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-							//para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		     // getLastCudaError("QVelDevComp27 execution failed");
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         if (para->getParD(level)->evenOrOdd==true)  para->getParD(level)->evenOrOdd=false;
-         else                                        para->getParD(level)->evenOrOdd=true;
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 ////Drag and Lift Part II
-		 //DragLiftPreD27(  para->getParD(level)->d0SP.f[0], 
-			//			  para->getParD(level)->QGeom.k, 
-			//			  para->getParD(level)->QGeom.q27[0],
-			//			  para->getParD(level)->QGeom.kQ, 
-			//			  para->getParD(level)->DragPreX,
-			//			  para->getParD(level)->DragPreY,
-			//			  para->getParD(level)->DragPreZ,
-			//			  para->getParD(level)->neighborX_SP,
-			//			  para->getParD(level)->neighborY_SP,
-			//			  para->getParD(level)->neighborZ_SP,
-			//			  para->getParD(level)->size_Mat_SP, 
-			//			  para->getParD(level)->evenOrOdd,
-			//			  para->getParD(level)->numberofthreads);
-		 //getLastCudaError("DragLift27 execution failed"); 
-		 //////////////////////////////////////////////////////////////////////////////////
-		 ////Calculation of Drag and Lift
-		 //////////////////////////////////////////////////////////////////////////////////
-		 ////if(t>para->getStartTurn())calcDragLift(para, level);
-		 //calcDragLift(para, level);
-		 //////////////////////////////////////////////////////////////////////////////////
-
-		 ////////////////////////////////////////////////////////////////////////////////
-		  //QPressDevNEQ27( para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, 
-		  //				  para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,  
-		  //				  para->getParD(level)->QPress.kN,       para->getParD(level)->QPress.kQ,    para->getParD(level)->omega,
-		  //				  para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-		  //				  para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		  //getLastCudaError("QPressDev27 execution failed");
-		  ////////////////////////////////////////////////////////////////////////////////
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 ////test for drag crisis
-		 //if (para->getParD(level)->QGeom.kQ > 0)
-		 //{
-			// QDevCompHighNu27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-			// 				  para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-			// 				  para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-			// 				  para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			// 				  para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-			// getLastCudaError("QDevComp27 (Geom) execution failed");
-		 //}
-		 //////////////////////////////////////////////////////////////////////////////////
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 ////Calculation of cp
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //if(t > para->getTStartOut())
-		 //{
-			// ////////////////////////////////////////////////////////////////////////////////
-			// CalcCPtop27(para->getParD(level)->d0SP.f[0], 
-			//			 para->getParD(level)->cpTopIndex, 
-			//			 para->getParD(level)->numberOfPointsCpTop, 
-			//			 para->getParD(level)->cpPressTop,
-			//			 para->getParD(level)->neighborX_SP,
-			//			 para->getParD(level)->neighborY_SP,
-			//			 para->getParD(level)->neighborZ_SP,
-			//			 para->getParD(level)->size_Mat_SP, 
-			//			 para->getParD(level)->evenOrOdd,
-			//			 para->getParD(level)->numberofthreads);
-			// //////////////////////////////////////////////////////////////////////////////////
-			// //CalcCPbottom27(para->getParD(level)->d0SP.f[0],
-			//	//			para->getParD(level)->cpBottomIndex, 
-			//	//			para->getParD(level)->numberOfPointsCpBottom, 
-			//	//			para->getParD(level)->cpPressBottom,
-			//	//			para->getParD(level)->neighborX_SP,
-			//	//			para->getParD(level)->neighborY_SP,
-			//	//			para->getParD(level)->neighborZ_SP,
-			//	//			para->getParD(level)->size_Mat_SP, 
-			//	//			para->getParD(level)->evenOrOdd,
-			//	//			para->getParD(level)->numberofthreads);
-			// //////////////////////////////////////////////////////////////////////////////////
-			// //CalcCPbottom27(para->getParD(level)->d0SP.f[0],
-			//	//			para->getParD(level)->cpBottom2Index, 
-			//	//			para->getParD(level)->numberOfPointsCpBottom2, 
-			//	//			para->getParD(level)->cpPressBottom2,
-			//	//			para->getParD(level)->neighborX_SP,
-			//	//			para->getParD(level)->neighborY_SP,
-			//	//			para->getParD(level)->neighborZ_SP,
-			//	//			para->getParD(level)->size_Mat_SP, 
-			//	//			para->getParD(level)->evenOrOdd,
-			//	//			para->getParD(level)->numberofthreads);
-			// //////////////////////////////////////////////////////////////////////////////////
-			// calcCp(para, level);
-			// ////////////////////////////////////////////////////////////////////////////////
-		 //}
-		 //////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-   //      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 ////printf("fein vor Propeller\n");
-		 //PropVelo(	para->getParD(level)->numberofthreads,   para->getParD(level)->neighborX_SP,    
-			//		para->getParD(level)->neighborY_SP,	     para->getParD(level)->neighborZ_SP,
-			//		para->getParD(level)->QPropeller.RhoBC,  para->getParD(level)->QPropeller.Vx,   
-			//		para->getParD(level)->QPropeller.Vy,     para->getParD(level)->QPropeller.Vz,
-			//		para->getParD(level)->QPropeller.k,      para->getParD(level)->QPropeller.kQ,     
-			//		para->getParD(level)->size_Mat_SP,       para->getParD(level)->geoSP,
-			//		para->getParD(level)->d0SP.f[0],         para->getParD(level)->evenOrOdd);
-		 //getLastCudaError("PropVelo execution failed");
-		 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-		 if (para->getNumprocs() > 1)
-		 {
-			 ////1D domain decomposition
-			 //exchangePreCollDataGPU27(para, comm, level);
-			 //3D domain decomposition
-			 //printf("start exchange Pre X (level: %d, myID: %d) \n", level, para->getMyID());
-			 exchangePreCollDataXGPU27(para, comm, cudaManager, level);
-			 //printf("end exchange Pre X (level: %d, myID: %d) \n", level, para->getMyID());
-			 //printf("start exchange Pre Y (level: %d, myID: %d) \n", level, para->getMyID());
-			 exchangePreCollDataYGPU27(para, comm, cudaManager, level);
-			 //printf("end exchange Pre Y (level: %d, myID: %d) \n", level, para->getMyID());
-			 //printf("start exchange Pre Z (level: %d, myID: %d) \n", level, para->getMyID());
-			 exchangePreCollDataZGPU27(para, comm, cudaManager, level);
-			 //printf("end exchange Pre Z (level: %d, myID: %d) \n", level, para->getMyID());
-			 //////////////////////////////////////////////////////////////////////////
-			 //3D domain decomposition convection diffusion
-			 if (para->getDiffOn()==true)
-			 {
-				 exchangePreCollDataADXGPU27(para, comm, cudaManager, level);
-				 exchangePreCollDataADYGPU27(para, comm, cudaManager, level);
-				 exchangePreCollDataADZGPU27(para, comm, cudaManager, level);
-			 }
-		 }
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //// File IO TEST
-		 //////////////////////////////////////////////////////////////////////////////////
-		 ////comm->startTimer();
-		 //if(para->getTOut()>0 && t%para->getTOut()==0 && t>para->getStartTurn())
-		 //{
-			// //////////////////////////////////////////////////////////////////////////
-			// //Timer SDK
-			// //////////////////////////////////////////////////////////////////////////
-			// if( para->getPrintFiles() )
-			// {
-			//	CalcMacSP27(para->getParD(level)->vx_SP,       
-			//				 para->getParD(level)->vy_SP,        
-			//				 para->getParD(level)->vz_SP,        
-			//				 para->getParD(level)->rho_SP, 
-			//				 para->getParD(level)->press_SP, 
-			//				 para->getParD(level)->geoSP,       
-			//				 para->getParD(level)->neighborX_SP, 
-			//				 para->getParD(level)->neighborY_SP, 
-			//				 para->getParD(level)->neighborZ_SP,
-			//				 para->getParD(level)->size_Mat_SP, 
-			//				 para->getParD(level)->numberofthreads,       
-			//				 para->getParD(level)->d0SP.f[0],    
-			//				 para->getParD(level)->evenOrOdd);
-			//	getLastCudaError("CalcMacSP27 execution failed"); 
-
-			//	para->cudaCopyPrint(level);
-
-			//	std::string ffname_bin = para->getFName()+"_bin_"+StringUtil::toString<int>(level)+"_"+StringUtil::toString<int>(para->getMyID())+"_"+StringUtil::toString<int>(t)+"_"+StringUtil::toString<int>(internaltimestep)+".vtk";
-			//	std::string ffname_bin_Points = para->getFName()+"_Points_"+"_bin_"+StringUtil::toString<int>(level)+"_"+StringUtil::toString<int>(para->getMyID())+"_"+StringUtil::toString<int>(t)+"_"+StringUtil::toString<int>(internaltimestep)+".vtk";
-			//	UnstrucuredGridWriter::writeUnstrucuredGridEff(para, level, ffname_bin, ffname_bin_Points);
-			//	////////////////////////////////////////////////////////////////////////////////
-			//}
-		 //}
-      }
-   }
-   else
-   {
-      for (int internaltimestep=0;internaltimestep<2;internaltimestep++)
-      {
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         updateGrid27(para, comm, cudaManager, pm, level+1, max_level, t, kernels);
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 kernels.at(level)->run();
-		  //if (t>para->getStartTurn()){
-			 // //para->setPhi((para->getPhi()+para->getParD(level)->deltaPhi));
-			 // KernelKum1hSP27(    para->getParD(level)->numberofthreads,       
-				//				  para->getParD(level)->omega,
-				//				  para->getParD(level)->deltaPhi,
-				//				  para->getAngularVelocity(),
-				//				  para->getParD(level)->geoSP, 
-				//				  para->getParD(level)->neighborX_SP, 
-				//				  para->getParD(level)->neighborY_SP, 
-				//				  para->getParD(level)->neighborZ_SP,
-				//				  para->getParD(level)->coordX_SP, 
-				//				  para->getParD(level)->coordY_SP, 
-				//				  para->getParD(level)->coordZ_SP,
-				//				  para->getParD(level)->d0SP.f[0],    
-				//				  para->getParD(level)->size_Mat_SP,  
-				//				  para->getParD(level)->evenOrOdd); 
-			 // getLastCudaError("KernelCasSPKum27 execution failed");
-			 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 // QVelDevice1h27(   para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-				//				para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-				//				para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-				//				para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,          
-				//				para->getPhi(),                        para->getAngularVelocity(),
-				//				para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-				//				para->getParD(level)->coordX_SP,       para->getParD(level)->coordY_SP,    para->getParD(level)->coordZ_SP,
-				//				para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		  //    getLastCudaError("QVelDev27 execution failed");
-			 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		  //}
-		  //else{
-			 // KernelKum1hSP27(    para->getParD(level)->numberofthreads,       
-				//				  para->getParD(level)->omega,
-				//				  (real)0.0,
-				//				  (real)0.0,
-				//				  para->getParD(level)->geoSP, 
-				//				  para->getParD(level)->neighborX_SP, 
-				//				  para->getParD(level)->neighborY_SP, 
-				//				  para->getParD(level)->neighborZ_SP,
-				//				  para->getParD(level)->coordX_SP, 
-				//				  para->getParD(level)->coordY_SP, 
-				//				  para->getParD(level)->coordZ_SP,
-				//				  para->getParD(level)->d0SP.f[0],    
-				//				  para->getParD(level)->size_Mat_SP,  
-				//				  para->getParD(level)->evenOrOdd); 
-			 // getLastCudaError("KernelCasSPKum27 execution failed");
-			 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 // QVelDevice1h27(   para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-				//				para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-				//				para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-				//				para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,          
-				//				para->getPhi(),                        (real)0.0,
-				//				para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-				//				para->getParD(level)->coordX_SP,       para->getParD(level)->coordY_SP,    para->getParD(level)->coordZ_SP,
-				//				para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		  //    getLastCudaError("QVelDev27 execution failed");
-			 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		  //}
-		 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 //Sponge Test
-		 //if (level == 7)
-		 //{
-			// KernelKumNewCompSpongeSP27(para->getParD(level)->numberofthreads,       
-			//							para->getParD(level)->omega, 
-			//							para->getParD(level)->geoSP, 
-			//							para->getParD(level)->neighborX_SP, 
-			//							para->getParD(level)->neighborY_SP, 
-			//							para->getParD(level)->neighborZ_SP,
-			//							para->getParD(level)->coordX_SP,
-			//							para->getParD(level)->coordY_SP,
-			//							para->getParD(level)->coordZ_SP,
-			//							para->getParD(level)->d0SP.f[0],    
-			//							para->getParD(level)->size_Mat_SP,  
-			//							para->getParD(level)->evenOrOdd); 
-			// getLastCudaError("KernelCasSPKum27 execution failed");
-		 //}
-		 //else
-		 //{
-			// KernelKumNewCompSP27(para->getParD(level)->numberofthreads,       
-			//					  para->getParD(level)->omega, 
-			//					  para->getParD(level)->geoSP, 
-			//					  para->getParD(level)->neighborX_SP, 
-			//					  para->getParD(level)->neighborY_SP, 
-			//					  para->getParD(level)->neighborZ_SP,
-			//					  para->getParD(level)->d0SP.f[0],    
-			//					  para->getParD(level)->size_Mat_SP,  
-			//					  para->getParD(level)->evenOrOdd); 
-			// getLastCudaError("KernelCasSPKum27 execution failed");
-		 //}
-		 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 //KernelKumAA2016CompBulkSP27(para->getParD(level)->numberofthreads,       
-				//						 para->getParD(level)->omega, 
-				//						 para->getParD(level)->geoSP, 
-				//						 para->getParD(level)->neighborX_SP, 
-				//						 para->getParD(level)->neighborY_SP, 
-				//						 para->getParD(level)->neighborZ_SP,
-				//						 para->getParD(level)->d0SP.f[0],    
-				//						 para->getParD(level)->size_Mat_SP,
-				//						 para->getParD(level)->size_Array_SP,
-				//						 level,
-				//						 para->getForcesDev(),
-				//						 para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelKumAA2016CompBulkSP27 execution failed");
-			 //KernelKumAA2016CompSP27(para->getParD(level)->numberofthreads,       
-				//				     para->getParD(level)->omega, 
-				//				     para->getParD(level)->geoSP, 
-				//				     para->getParD(level)->neighborX_SP, 
-				//				     para->getParD(level)->neighborY_SP, 
-				//				     para->getParD(level)->neighborZ_SP,
-				//				     para->getParD(level)->d0SP.f[0],    
-				//				     para->getParD(level)->size_Mat_SP,
-				//				     level,
-				//				     para->getForcesDev(),
-				//				     para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelKumAA2016CompSP27 execution failed");
-			 //KernelBGKPlusCompSP27(para->getParD(level)->numberofthreads,       
-			 //					   para->getParD(level)->omega, 
-			 //					   para->getParD(level)->geoSP, 
-			 //					   para->getParD(level)->neighborX_SP, 
-			 //					   para->getParD(level)->neighborY_SP, 
-			 //					   para->getParD(level)->neighborZ_SP,
-			 //					   para->getParD(level)->d0SP.f[0],    
-			 //					   para->getParD(level)->size_Mat_SP,  
-			 //					   para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelBGKPlusSP27 execution failed");
-			 //printf("Level: %d \n", level);
-			//KernelKumNewCompSP27(para->getParD(level)->numberofthreads,       
-			//					  para->getParD(level)->omega, 
-			//					  para->getParD(level)->geoSP, 
-			//					  para->getParD(level)->neighborX_SP, 
-			//					  para->getParD(level)->neighborY_SP, 
-			//					  para->getParD(level)->neighborZ_SP,
-			//					  para->getParD(level)->d0SP.f[0],    
-			//					  para->getParD(level)->size_Mat_SP,
-			//					  para->getParD(level)->size_Array_SP,
-			//					  level,
-			//					  para->getForcesDev(),
-			//					  para->getParD(level)->evenOrOdd); 
-			//getLastCudaError("KernelCasSPKum27 execution failed");
-			//KernelCumulantD3Q27F3(para->getParD(level)->numberofthreads,
-			//					  para->getParD(level)->omega, 
-			//					  para->getParD(level)->geoSP, 
-			//					  para->getParD(level)->neighborX_SP, 
-			//					  para->getParD(level)->neighborY_SP, 
-			//					  para->getParD(level)->neighborZ_SP,
-			//					  para->getParD(level)->d0SP.f[0],    
-			//					  para->getParD(level)->g6.g[0],    
-			//					  para->getParD(level)->size_Mat_SP,
-			//					  level,
-			//					  para->getForcesDev(),
-			//					  para->getParD(level)->evenOrOdd);
-			//getLastCudaError("KernelCumulantD3Q27F3 execution failed");
-			 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 //KernelKumCompSP27(  para->getParD(level)->numberofthreads,       
-			 //			  para->getParD(level)->omega, 
-			 //			  para->getParD(level)->geoSP, 
-			 //			  para->getParD(level)->neighborX_SP, 
-			 //			  para->getParD(level)->neighborY_SP, 
-			 //			  para->getParD(level)->neighborZ_SP,
-			 //			  para->getParD(level)->d0SP.f[0],    
-			 //			  para->getParD(level)->size_Mat_SP,  
-			 //			  para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelCasSPKum27 execution failed");
-			 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 //KernelBGKPlusSP27(para->getParD(level)->numberofthreads,       
-			 //			    para->getParD(level)->omega, 
-			 //			    para->getParD(level)->geoSP, 
-			 //			    para->getParD(level)->neighborX_SP, 
-			 //			    para->getParD(level)->neighborY_SP, 
-			 //			    para->getParD(level)->neighborZ_SP,
-			 //			    para->getParD(level)->d0SP.f[0],    
-			 //			    para->getParD(level)->size_Mat_SP,  
-			 //			    para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelBGKPlusSP27 execution failed");
-			 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 // KernelMRTSP27(para->getParD(level)->numberofthreads,       
-			 //			para->getParD(level)->omega, 
-			 //			para->getParD(level)->geoSP, 
-			 //			para->getParD(level)->neighborX_SP, 
-			 //			para->getParD(level)->neighborY_SP, 
-			 //			para->getParD(level)->neighborZ_SP,
-			 //			para->getParD(level)->d0SP.f[0],    
-			 //			para->getParD(level)->size_Mat_SP,  
-			 //			para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelMRT27 execution failed");
-			 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 //KernelCascadeSP27(para->getParD(level)->numberofthreads,       
-			 //			   para->getParD(level)->omega, 
-			 //			   para->getParD(level)->geoSP, 
-			 //			   para->getParD(level)->neighborX_SP, 
-			 //			   para->getParD(level)->neighborY_SP, 
-			 //			   para->getParD(level)->neighborZ_SP,
-			 //			   para->getParD(level)->d0SP.f[0],    
-			 //			   para->getParD(level)->size_Mat_SP,  
-			 //			   para->getParD(level)->evenOrOdd); 
-			 // getLastCudaError("KernelCas27 execution failed");
-			 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 //KernelKumNewSP27(    para->getParD(level)->numberofthreads,       
-			 //				  para->getParD(level)->omega, 
-			 //				  para->getParD(level)->geoSP, 
-			 //				  para->getParD(level)->neighborX_SP, 
-			 //				  para->getParD(level)->neighborY_SP, 
-			 //				  para->getParD(level)->neighborZ_SP,
-			 //				  para->getParD(level)->d0SP.f[0],    
-			 //				  para->getParD(level)->size_Mat_SP,  
-			 //				  para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelCasSPKum27 execution failed");
-			 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 //KernelCasSPMSOHM27(  para->getParD(level)->numberofthreads,       
-			 //                     para->getParD(level)->omega, 
-			 //                     para->getParD(level)->geoSP, 
-			 //                     para->getParD(level)->neighborX_SP, 
-			 //                     para->getParD(level)->neighborY_SP, 
-			 //                     para->getParD(level)->neighborZ_SP,
-			 //                     para->getParD(level)->d0SP.f[0],    
-			 //                     para->getParD(level)->size_Mat_SP,  
-			 //                     para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelCasSP27 execution failed");
-			 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 //KernelCasSPMS27(     para->getParD(level)->numberofthreads,       
-			 //                     para->getParD(level)->omega, 
-			 //                     para->getParD(level)->geoSP, 
-			 //                     para->getParD(level)->neighborX_SP, 
-			 //                     para->getParD(level)->neighborY_SP, 
-			 //                     para->getParD(level)->neighborZ_SP,
-			 //                     para->getParD(level)->d0SP.f[0],    
-			 //                     para->getParD(level)->size_Mat_SP,  
-			 //                     para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelCasSP27 execution failed");
-			 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			 //KernelCasSP27( para->getParD(level)->numberofthreads,       
-			 //               para->getParD(level)->omega, 
-			 //               para->getParD(level)->geoSP, 
-			 //               para->getParD(level)->neighborX_SP, 
-			 //               para->getParD(level)->neighborY_SP, 
-			 //               para->getParD(level)->neighborZ_SP,
-			 //               para->getParD(level)->d0SP.f[0],    
-			 //               para->getParD(level)->size_Mat_SP,  
-			 //               para->getParD(level)->evenOrOdd); 
-			 //getLastCudaError("KernelCasSP27 execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 //if (para->getDiffOn()==true)
-		 //{
-			// if (para->getDiffMod() == 7)
-			// {
-			//	 KernelThS7( para->getParD(level)->numberofthreads,
-			//		 para->getParD(level)->diffusivity, 
-			//		 para->getParD(level)->geoSP, 
-			//		 para->getParD(level)->neighborX_SP, 
-			//		 para->getParD(level)->neighborY_SP, 
-			//		 para->getParD(level)->neighborZ_SP,
-			//		 para->getParD(level)->d0SP.f[0],    
-			//		 para->getParD(level)->d7.f[0],    
-			//		 para->getParD(level)->size_Mat_SP,  
-			//		 para->getParD(level)->evenOrOdd); 
-			//	 getLastCudaError("KernelThS7 execution failed");
-			// } 
-			// else if (para->getDiffMod() == 27)
-			// {
-			//	 KernelThS27(para->getParD(level)->numberofthreads,
-			//		 para->getParD(level)->diffusivity, 
-			//		 para->getParD(level)->geoSP, 
-			//		 para->getParD(level)->neighborX_SP, 
-			//		 para->getParD(level)->neighborY_SP, 
-			//		 para->getParD(level)->neighborZ_SP,
-			//		 para->getParD(level)->d0SP.f[0],    
-			//		 para->getParD(level)->d27.f[0],    
-			//		 para->getParD(level)->size_Mat_SP,  
-			//		 para->getParD(level)->evenOrOdd); 
-			//	 getLastCudaError("KernelThS27 execution failed");
-			// }
-		 //}
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         if (para->getDiffOn()==true)
-         {
-            if (para->getDiffMod() == 7)
-            {
-				//output << " Diff Mod 7\n";
-			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   // incomp
-			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion kernel
-              //KernelADincomp7(para->getParD(level)->numberofthreads,    para->getParD(level)->diffusivity,  para->getParD(level)->geoSP, 
-				//			   para->getParD(level)->neighborX_SP,       para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-				//			   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],      para->getParD(level)->size_Mat_SP,  
-				//			   para->getParD(level)->evenOrOdd); 
-			  //getLastCudaError("KernelADincomp7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion boundary condition
-               QNoSlipADincompDev7( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-									para->getParD(level)->d0SP.f[0],             para->getParD(level)->d7.f[0],      para->getParD(level)->Temp.temp,  
-									para->getParD(level)->diffusivity,           para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
-									para->getParD(level)->Temp.kTemp,            para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
-									para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-									para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-               getLastCudaError("QNoSlipADincompDev7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + velocity boundary condition
-			   if (t<15580)//(t>500000 && t<515580)//(t>300000 && t<315580)
-			   {
-                 QADVeloIncompDev7(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-								   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.tempPulse, 
-								   para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
-								   para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,	para->getParD(level)->TempVel.kTemp,  
-								   para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-								   para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-				 getLastCudaError("QADVeloIncompDev7 execution failed");
-
-			   }
-			   else
-			   {
-                 QADVeloIncompDev7(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-								   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.temp, 
-								   para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
-								   para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,	para->getParD(level)->TempVel.kTemp,  
-								   para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-								   para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-                 getLastCudaError("QADVeloIncompDev7 execution failed");
-
-			   }
-           //    QADVeloIncompDev7(  para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-								   //para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.tempPulse, 
-								   //para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
-								   //para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,	    para->getParD(level)->TempVel.kTemp,  
-								   //para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	    para->getParD(level)->neighborY_SP, 
-								   //para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-           //    getLastCudaError("QADVeloIncompDev7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + velocity boundary condition
-               QADPressIncompDev7(   para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
-									 para->getParD(level)->d0SP.f[0],        para->getParD(level)->d7.f[0],			para->getParD(level)->TempPress.temp, 
-									 para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
-									 para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp,  
-									 para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-									 para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-               getLastCudaError("QADPressIncompDev7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-			   
-
-			   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   //// comp
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion kernel
-      //         KernelThS7( para->getParD(level)->numberofthreads,    para->getParD(level)->diffusivity,  para->getParD(level)->geoSP, 
-      //                     para->getParD(level)->neighborX_SP,       para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-      //                     para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],      para->getParD(level)->size_Mat_SP,  
-      //                     para->getParD(level)->evenOrOdd); 
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion boundary condition
-      //         QADDev7( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-      //                  para->getParD(level)->d0SP.f[0],             para->getParD(level)->d7.f[0],      para->getParD(level)->Temp.temp,  
-      //                  para->getParD(level)->diffusivity,           para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
-      //                  para->getParD(level)->Temp.kTemp,            para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
-      //                  para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-      //                  para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-      //         getLastCudaError("QADDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-      //         QADVelDev7( para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-      //                     para->getParD(level)->d0SP.f[0],          para->getParD(level)->d7.f[0],			para->getParD(level)->TempVel.temp, 
-      //                     para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
-      //                     para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,     para->getParD(level)->TempVel.kTemp,  
-      //                     para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
-      //                     para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-      //         getLastCudaError("QADVelDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-      //         QADPressDev7( para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
-      //                       para->getParD(level)->d0SP.f[0],        para->getParD(level)->d7.f[0],			para->getParD(level)->TempPress.temp, 
-      //                       para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
-      //                       para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp,   para->getParD(level)->TempPress.kTemp,  
-      //                       para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
-      //                       para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-      //         getLastCudaError("QADPressDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            } 
-            else if (para->getDiffMod() == 27)
-            {
-			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   // incomp
-			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion kernel
-      //         KernelADincomp27( para->getParD(level)->numberofthreads,    para->getParD(level)->diffusivity,  para->getParD(level)->geoSP, 
-						//		   para->getParD(level)->neighborX_SP,       para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-						//		   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],     para->getParD(level)->size_Mat_SP,  
-						//		   para->getParD(level)->evenOrOdd); 
-			   //getLastCudaError("KernelADincomp27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion boundary condition
-      //         QNoSlipADincompDev27(para->getParD(level)->numberofthreads,      para->getParD(level)->nx,           para->getParD(level)->ny,
-						//			  para->getParD(level)->d0SP.f[0],            para->getParD(level)->d27.f[0],     para->getParD(level)->Temp.temp,  
-						//			  para->getParD(level)->diffusivity,          para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
-						//			  para->getParD(level)->Temp.kTemp,           para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
-						//			  para->getParD(level)->neighborX_SP,         para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-						//			  para->getParD(level)->size_Mat_SP,          para->getParD(level)->evenOrOdd);
-      //         getLastCudaError("QNoSlipADincompDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-			   //if (t>500000 && t<515580)//(t>300000 && t<315580)
-			   //{
-				   //QADVeloIncompDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				 para->getParD(level)->ny,
-							//		    para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		 para->getParD(level)->TempVel.tempPulse, 
-							//		    para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,	 para->getParD(level)->TempVel.k,
-							//		    para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,   para->getParD(level)->TempVel.kTemp,  
-							//		    para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	 para->getParD(level)->neighborY_SP, 
-							//		    para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,	 para->getParD(level)->evenOrOdd);
-				   //getLastCudaError("QADVeloIncompDev27 execution failed");
-			   //}
-			   //else
-			   //{
-				  // QADVeloIncompDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-						//			    para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		para->getParD(level)->TempVel.temp, 
-						//			    para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,	para->getParD(level)->TempVel.k,
-						//			    para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,  para->getParD(level)->TempVel.kTemp,  
-						//			    para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-						//			    para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,	para->getParD(level)->evenOrOdd);
-				  // getLastCudaError("QADVeloIncompDev27 execution failed");
-			   //}
-      //     //    QADVeloIncompDev27( para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-						//		     //para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		para->getParD(level)->TempVel.temp, 
-						//		     //para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->TempVel.k,
-						//		     //para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->TempVel.kTemp,   para->getParD(level)->TempVel.kTemp,  
-						//		     //para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-						//		     //para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-      //     //    getLastCudaError("QADVeloIncompDev27 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + pressure boundary condition
-           //    QADPressIncompDev27(   para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
-									  //para->getParD(level)->d0SP.f[0],        para->getParD(level)->d27.f[0],			para->getParD(level)->TempPress.temp, 
-									  //para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
-									  //para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp,  para->getParD(level)->TempPress.kTemp,  
-									  //para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
-									  //para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-           //    getLastCudaError("QADPressIncompDev27 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-			   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   //// comp
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion kernel
-              //KernelThS27(para->getParD(level)->numberofthreads,
-              //            para->getParD(level)->diffusivity, 
-              //            para->getParD(level)->geoSP, 
-              //            para->getParD(level)->neighborX_SP, 
-              //            para->getParD(level)->neighborY_SP, 
-              //            para->getParD(level)->neighborZ_SP,
-              //            para->getParD(level)->d0SP.f[0],    
-              //            para->getParD(level)->d27.f[0],    
-              //            para->getParD(level)->size_Mat_SP,  
-              //            para->getParD(level)->evenOrOdd); 
-              //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion boundary condition
-               QADBBDev27(para->getParD(level)->numberofthreads,      para->getParD(level)->nx,           para->getParD(level)->ny,
-                          para->getParD(level)->d0SP.f[0],            para->getParD(level)->d27.f[0],     para->getParD(level)->Temp.temp,  
-                          para->getParD(level)->diffusivity,          para->getParD(level)->Temp.k,       para->getParD(level)->QGeom.q27[0], 
-                          para->getParD(level)->Temp.kTemp,           para->getParD(level)->Temp.kTemp,   para->getParD(level)->omega,
-                          para->getParD(level)->neighborX_SP,         para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-                          para->getParD(level)->size_Mat_SP,          para->getParD(level)->evenOrOdd);
-               getLastCudaError("QADBBDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-			   //if (t<1000)//(t>100000 && t<103895)//(t>1600000 && t<1662317)//(t>500000 && t<515580)//(t<1000)//(t<15580)//(t>400000 && t<415580)//
-			   //{
-				  // QADVelDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-						//	   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		para->getParD(level)->TempVel.tempPulse, 
-						//	   para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->Qinflow.k,
-						//	   para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,  
-						//	   para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-						//	   para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-				  // getLastCudaError("QADVelDev27 execution failed");
-			   //}
-			   //else
-			   //{
-				  // QADVelDev27(para->getParD(level)->numberofthreads,    para->getParD(level)->nx,				para->getParD(level)->ny,
-						//	   para->getParD(level)->d0SP.f[0],          para->getParD(level)->d27.f[0],		para->getParD(level)->TempVel.temp, 
-						//	   para->getParD(level)->TempVel.velo,       para->getParD(level)->diffusivity,		para->getParD(level)->Qinflow.k,
-						//	   para->getParD(level)->Qinflow.q27[0],     para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,  
-						//	   para->getParD(level)->omega,              para->getParD(level)->neighborX_SP,	para->getParD(level)->neighborY_SP, 
-						//	   para->getParD(level)->neighborZ_SP,       para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-				  // getLastCudaError("QADVelDev27 execution failed");
-			   //}
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-      //         //QADPressDev27( para->getParD(level)->numberofthreads,  para->getParD(level)->nx,				para->getParD(level)->ny,
-      //         //               para->getParD(level)->d0SP.f[0],        para->getParD(level)->d27.f[0],			para->getParD(level)->TempPress.temp, 
-      //         //               para->getParD(level)->TempPress.velo,   para->getParD(level)->diffusivity,		para->getParD(level)->TempPress.k,
-      //         //               para->getParD(level)->QPress.q27[0],    para->getParD(level)->TempPress.kTemp,  para->getParD(level)->TempPress.kTemp,  
-      //         //               para->getParD(level)->omega,            para->getParD(level)->neighborX_SP,		para->getParD(level)->neighborY_SP, 
-      //         //               para->getParD(level)->neighborZ_SP,     para->getParD(level)->size_Mat_SP,		para->getParD(level)->evenOrOdd);
-      //         //getLastCudaError("QADPressDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            }
-         }
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 if (para->getNumprocs() > 1)
-		 {
-			 ////1D domain decomposition
-			 //exchangePostCollDataGPU27(para, comm, level);
-			 //3D domain decomposition
-			 //printf("start exchange Post X (level: %d, myID: %d) \n", level, para->getMyID());
-			 exchangePostCollDataXGPU27(para, comm, cudaManager, level);
-			 //printf("end exchange Post X (level: %d, myID: %d) \n", level, para->getMyID());
-			 //printf("start exchange Post Y (level: %d, myID: %d) \n", level, para->getMyID());
-			 exchangePostCollDataYGPU27(para, comm, cudaManager, level);
-			 //printf("end exchange Post Y (level: %d, myID: %d) \n", level, para->getMyID());
-			 //printf("start exchange Post Z (level: %d, myID: %d) \n", level, para->getMyID());
-			 exchangePostCollDataZGPU27(para, comm, cudaManager, level);
-			 //printf("end exchange Post Z (level: %d, myID: %d) \n", level, para->getMyID());
-			 //////////////////////////////////////////////////////////////////////////
-			 //3D domain decomposition convection diffusion
-			 if (para->getDiffOn()==true)
-			 {
-				 exchangePostCollDataADXGPU27(para, comm, cudaManager, level);
-				 exchangePostCollDataADYGPU27(para, comm, cudaManager, level);
-				 exchangePostCollDataADZGPU27(para, comm, cudaManager, level);
-			 }
-		 }
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//QPressDev27_IntBB(  para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC,
-		//					para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,       para->getParD(level)->QPress.q27[0], 
-		//					para->getParD(level)->QPress.kQ,       para->getParD(level)->QPress.kQ,      para->getParD(level)->omega,
-		//					para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP,
-		//					para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		//getLastCudaError("QPressDev27_IntBB fine execution failed");
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 //QPressDevOld27( para->getParD(level)->numberofthreads, para->getParD(level)->QpressX1.RhoBC, 
-			//			 para->getParD(level)->d0SP.f[0],       para->getParD(level)->QpressX1.k,  
-			//			 para->getParD(level)->QpressX1.kN,     para->getParD(level)->QpressX1.kQ,  para->getParD(level)->omega,
-			//			 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//			 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		 //getLastCudaError("QPressDev27 execution failed");
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 //if (para->getParD(level)->kSlipQ > 0)
-		 //{
-			// QSlipDevComp27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0],    para->getParD(level)->QSlip.k,
-			//	 para->getParD(level)->QSlip.q27[0],    para->getParD(level)->kSlipQ,       para->getParD(level)->omega,
-			//	 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//	 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-			// getLastCudaError("QSlipDev27 execution failed");
-			// //QSlipDev27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0],    para->getParD(level)->QSlip.k,
-			// //			 para->getParD(level)->QSlip.q27[0],    para->getParD(level)->kSlipQ,       para->getParD(level)->omega,
-			// //			 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			// //			 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-			// //getLastCudaError("Slip27 execution failed");
-			// //QSlipDev27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0],    para->getParD(level)->QGeom.k,
-			// //			 para->getParD(level)->QGeom.q27[0],    para->getParD(level)->QGeom.kQ,       para->getParD(level)->omega,
-			// //			 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			// //			 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-			// //getLastCudaError("Slip27 execution failed");
-		 //}
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 //if (para->getParD(level)->kQ > 0)
-		 //{
-			// QDevComp27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-			//		    para->getParD(level)->d0SP.f[0],             para->getParD(level)->QWall.k,      para->getParD(level)->QWall.q27[0], 
-			//		    para->getParD(level)->kQ,                    para->getParD(level)->kQ,           para->getParD(level)->omega,
-			//			para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//			para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-			//getLastCudaError("QDevComp27 (Wall) execution failed");
-		 //}
-		 //QDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-			//	 para->getParD(level)->d0SP.f[0],             para->getParD(level)->QWall.k,      para->getParD(level)->QWall.q27[0], 
-			//	 para->getParD(level)->kQ,                    para->getParD(level)->kQ,           para->getParD(level)->omega,
-			//	 para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//	 para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-		 //getLastCudaError("QDev27 execution failed");
-		 if (para->getParD(level)->kInflowQ > 0)
-		 {
-		      QVelDevCompZeroPress27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,             para->getParD(level)->ny,
-									 para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,     para->getParD(level)->Qinflow.Vz,
-									 para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,      para->getParD(level)->Qinflow.q27[0], 
-									 para->getParD(level)->kInflowQ,        para->getParD(level)->Qinflow.kArray, para->getParD(level)->omega,
-									 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP,
-									 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		      getLastCudaError("QVelDevCompZeroPress27 execution failed");
-		 }
-
-		 //if (para->getParD(level)->QGeom.kQ > 0)
-		 //{
-			//  QDevComp27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-		 // 				 para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-		 // 				 para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-		 // 				 para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-		 // 				 para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-			//  getLastCudaError("QDevComp27 (Geom) execution failed");
-		 //     //QVelDevCompZeroPress27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-			//					//	 para->getParD(level)->QGeom.Vx,        para->getParD(level)->QGeom.Vy,     para->getParD(level)->QGeom.Vz,
-			//					//	 para->getParD(level)->d0SP.f[0],       para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-			//					//	 para->getParD(level)->QGeom.kQ,        para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-			//					//	 para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-			//					//	 para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		 //     //getLastCudaError("QVelDevCompZeroPress27 execution failed");
-		 //}
-		  //QDev27(para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
-		  //		 para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
-		  //		 para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
-		  //		 para->getParD(level)->neighborX_SP,          para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-		  //		 para->getParD(level)->size_Mat_SP,           para->getParD(level)->evenOrOdd);
-		  //getLastCudaError("QDev27 (Geom) execution failed");
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		      //QVelDevice1h27(   para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-								//para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-								//para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-								//para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,          
-								//para->getPhi(),                        para->getAngularVelocity(),
-								//para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-								//para->getParD(level)->coordX_SP,       para->getParD(level)->coordY_SP,    para->getParD(level)->coordZ_SP,
-								//para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		      //getLastCudaError("QVelDev27 execution failed");
-			  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		 //??????????????????????????????????
-      //      QVelDev27(  para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-      //                  para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-      //                  para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-						//para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,
-      //                  para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-      //                  para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-      //      getLastCudaError("QVelDev27 execution failed");
-
-		     // QVelDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-							//para->getParD(level)->Qinflow.Vx,      para->getParD(level)->Qinflow.Vy,   para->getParD(level)->Qinflow.Vz,
-							//para->getParD(level)->d0SP.f[0],       para->getParD(level)->Qinflow.k,    para->getParD(level)->Qinflow.q27[0], 
-							//para->getParD(level)->kInflowQ,        para->getParD(level)->kInflowQ,     para->getParD(level)->omega,
-							//para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-							//para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		     // getLastCudaError("QVelDevComp27 execution failed");
-
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         if (para->getParD(level)->evenOrOdd==true)  para->getParD(level)->evenOrOdd=false;
-         else                                        para->getParD(level)->evenOrOdd=true;
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //press NEQ comp
-		 //QPressDevNEQ27(para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, 
-		 //				para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,  
-		 //				para->getParD(level)->QPress.kN,       para->getParD(level)->QPress.kQ,    para->getParD(level)->omega,
-		 //				para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-		 //				para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-		 //getLastCudaError("QPressDevNEQ27 execution failed");
-		 ////////////////////////////////////////////////////////////////////////////////
-		 //press EQ comp
-		 //if (para->getParD(level)->QPress.kQ > 0)
-		 //{
-			// QPressDevEQZ27(para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, 
-		 //					para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,  
-		 //					para->getParD(level)->QPress.kN,       para->getParD(level)->kDistTestRE.f[0],       
-			//				para->getParD(level)->QPress.kQ,       para->getParD(level)->omega,
-		 //					para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP,
-		 //					para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-			// getLastCudaError("QPressDevEQZ27 execution failed");
-		 //}
-		 ////////////////////////////////////////////////////////////////////////////////
-
-
-
-		 //Spiegelbenchmark
-		 //////////////////////////////////////////////////////////////////////////////////
-		 ////Calculation of cp
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //if (/*(para->getParD(level)->numberOfPointsCpTop > 0)*/ (level == 5) && (t > para->getTStartOut()))
-		 //{
-			// ////////////////////////////////////////////////////////////////////////////////
-			// //Level 7
-			// CalcCPtop27(para->getParD(7)->d0SP.f[0],
-			//			 para->getParD(7)->cpTopIndex,
-			//			 para->getParD(7)->numberOfPointsCpTop,
-			//			 para->getParD(7)->cpPressTop,
-			//			 para->getParD(7)->neighborX_SP,
-			//			 para->getParD(7)->neighborY_SP,
-			//			 para->getParD(7)->neighborZ_SP,
-			//			 para->getParD(7)->size_Mat_SP,
-			//			 para->getParD(7)->evenOrOdd,
-			//			 para->getParD(7)->numberofthreads);
-			// //////////////////////////////////////////////////////////////////////////////////
-			// calcPressForMirror(para, 7);
-			// ////////////////////////////////////////////////////////////////////////////////
-			// //Level 8
-			// CalcCPtop27(para->getParD(8)->d0SP.f[0],
-			//			 para->getParD(8)->cpTopIndex,
-			//			 para->getParD(8)->numberOfPointsCpTop,
-			//			 para->getParD(8)->cpPressTop,
-			//			 para->getParD(8)->neighborX_SP,
-			//			 para->getParD(8)->neighborY_SP,
-			//			 para->getParD(8)->neighborZ_SP,
-			//			 para->getParD(8)->size_Mat_SP,
-			//			 para->getParD(8)->evenOrOdd,
-			//			 para->getParD(8)->numberofthreads);
-			// //////////////////////////////////////////////////////////////////////////////////
-			// calcPressForMirror(para, 8);
-			// ////////////////////////////////////////////////////////////////////////////////
-			// //print press mirror
-			// printScalars(para, true); //true for binary
-			// ////////////////////////////////////////////////////////////////////////////////
-		 //}
-		 //////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-		 ////////////////////////////////////////////////////////////////////////////////
-		 //fine to coarse interpolation
-			 //ScaleFC_comp_D3Q27F3(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],     para->getParD(level)->g6.g[0],
-				//			      para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-				//			      para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-				//			      para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-				//			      para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-				//			      para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega,
-				//			      para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny,
-				//			      para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-				//			      para->getParD(level)->offFC);
-    //        getLastCudaError("ScaleFC_comp_D3Q27F3 execution failed");
-			////////////////////////////////////////////////////////////////////////////////
-			//ScaleFC_0817_comp_27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],
-							     //para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-							     //para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-							     //para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-							     //para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-							     //para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega,
-							     //para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny,
-							     //para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-							     //para->getParD(level)->offFC);
-            //getLastCudaError("ScaleFC_0817_comp_27 execution failed");
-         //ScaleFC_RhoSq_3rdMom_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
-									//	para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-									//	para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-									//	para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-									//	para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-									//	para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-									//	para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-									//	para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-									//	para->getParD(level)->offFC);
-         //getLastCudaError("ScaleFC_RhoSq_3rdMom_comp_27 execution failed");
-		 ////////////////////////////////////////////////////////////////////////////////
-         ScaleFC_RhoSq_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
-								para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-								para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-								para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-								para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-								para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-								para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-								para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-								para->getParD(level)->offFC);
-         getLastCudaError("ScaleFC27_RhoSq_comp execution failed");
-		 ////////////////////////////////////////////////////////////////////////////////
-		 //data exchange
-		 if (para->getNumprocs() > 1)
-		 {
-			 ////1D domain decomposition
-			 //exchangePreCollDataGPU27(para, comm, level);
-			 //3D domain decomposition
-			 //printf("start exchange Pre X (level: %d, myID: %d) \n", level, para->getMyID());
-			 exchangePreCollDataXGPU27(para, comm, cudaManager, level);
-			 //printf("end exchange Pre X (level: %d, myID: %d) \n", level, para->getMyID());
-			 //printf("start exchange Pre Y (level: %d, myID: %d) \n", level, para->getMyID());
-			 exchangePreCollDataYGPU27(para, comm, cudaManager, level);
-			 //printf("end exchange Pre Y (level: %d, myID: %d) \n", level, para->getMyID());
-			 //printf("start exchange Pre Z (level: %d, myID: %d) \n", level, para->getMyID());
-			 exchangePreCollDataZGPU27(para, comm, cudaManager, level);
-			 //printf("end exchange Pre Z (level: %d, myID: %d) \n", level, para->getMyID());
-			 //////////////////////////////////////////////////////////////////////////
-			 //3D domain decomposition convection diffusion
-			 if (para->getDiffOn()==true)
-			 {
-				 exchangePreCollDataADXGPU27(para, comm, cudaManager, level);
-				 exchangePreCollDataADYGPU27(para, comm, cudaManager, level);
-				 exchangePreCollDataADZGPU27(para, comm, cudaManager, level);
-			 }
-		 }
-		 //////////////////////////////////////////////////////////////////////////////////
-		 ////coarse to fine interpolation
-			 //ScaleCF_comp_D3Q27F3(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],     para->getParD(level+1)->g6.g[0],
-				//			      para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-				//			      para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-				//			      para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-				//			      para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 			   
-				//			      para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-				//			      para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-				//			      para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-				//			      para->getParD(level)->offCF);
-    //        getLastCudaError("ScaleCF_comp_D3Q27F3 execution failed");
-			////////////////////////////////////////////////////////////////////////
-			//ScaleCF_0817_comp_27(para->getParD(level)->d0SP.f[0], para->getParD(level + 1)->d0SP.f[0],
-			//				     para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-			//				     para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-			//				     para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-			//				     para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF,
-			//				     para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega,
-			//				     para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny,
-			//				     para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-			//				     para->getParD(level)->offCF);
-   //         getLastCudaError("ScaleCF_0817_comp_27 execution failed");
-		    ////////////////////////////////////////////////////////////////////////
-         ScaleCF_RhoSq_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-								para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-								para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-								para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-								para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-								para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-								para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-								para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-								para->getParD(level)->offCF);
-         getLastCudaError("ScaleCF27_RhoSq_comp execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //ScaleCF_RhoSq_3rdMom_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-									//	para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-									//	para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-									//	para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-									//	para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-									//	para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-									//	para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-									//	para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-									//	para->getParD(level)->offCF);
-         //getLastCudaError("ScaleCF_RhoSq_3rdMom_comp_27 execution failed");
-		 ////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //ScaleCF27(  para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-         //            para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP,
-         //            para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP, para->getParD(level+1)->neighborZ_SP,
-         //            para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,  para->getParD(level)->evenOrOdd,
-         //            para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-         //            para->getParD(level)->K_CF,           para->getParD(level)->omega,          para->getParD(level+1)->omega, 
-         //            para->getParD(level)->vis,            para->getParD(level)->nx,             para->getParD(level)->ny, 
-         //            para->getParD(level+1)->nx,           para->getParD(level+1)->ny,           para->getParD(level)->gridNX);
-         //getLastCudaError("ScaleCF27 execution failed");
-
-         //ScaleFC27(  para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
-         //            para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP, 
-         //            para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP, para->getParD(level+1)->neighborZ_SP, 
-         //            para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,  para->getParD(level)->evenOrOdd,
-         //            para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-         //            para->getParD(level)->K_FC,           para->getParD(level)->omega,          para->getParD(level+1)->omega, 
-         //            para->getParD(level)->vis,            para->getParD(level)->nx,             para->getParD(level)->ny, 
-         //            para->getParD(level+1)->nx,           para->getParD(level+1)->ny,           para->getParD(level)->gridNX);
-         //getLastCudaError("ScaleFC27 execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //ScaleCFEff27(  para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-         //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-         //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-         //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-         //               para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-         //               para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-         //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-         //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-         //               para->getParD(level)->offCF);
-         //getLastCudaError("ScaleCF27 execution failed");
-
-         //ScaleFCEff27(  para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
-         //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-         //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-         //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-         //               para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-         //               para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-         //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-         //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-         //               para->getParD(level)->offFC);
-         //getLastCudaError("ScaleFC27 execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //ScaleCFLast27( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-         //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-         //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-         //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-         //               para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-         //               para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-         //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-         //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-         //               para->getParD(level)->offCF);
-         //getLastCudaError("ScaleCF27 execution failed");
-
-         //ScaleFCLast27( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
-         //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-         //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-         //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-         //               para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-         //               para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-         //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-         //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-         //               para->getParD(level)->offFC);
-         //getLastCudaError("ScaleFC27 execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //ScaleCFpress27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-         //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-         //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-         //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-         //               para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-         //               para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-         //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-         //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-         //               para->getParD(level)->offCF);
-         //getLastCudaError("ScaleCF27 execution failed");
-
-         //ScaleFCpress27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
-         //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-         //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-         //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-         //               para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-         //               para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-         //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-         //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-         //               para->getParD(level)->offFC);
-         //getLastCudaError("ScaleFC27 execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-        // ScaleCF_RhoSq_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-								//para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-								//para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-								//para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-								//para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-								//para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-								//para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-								//para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-								//para->getParD(level)->offCF);
-        // getLastCudaError("ScaleCF27_RhoSq_comp execution failed");
-
-        // ScaleFC_RhoSq_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
-								//para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-								//para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-								//para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-								//para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-								//para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-								//para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-								//para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-								//para->getParD(level)->offFC);
-        // getLastCudaError("ScaleFC27_RhoSq_comp execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-        // ScaleCF_Fix_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-								//para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-								//para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-								//para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-								//para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-								//para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-								//para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-								//para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-								//para->getParD(level)->offCF);
-        // getLastCudaError("ScaleCF27 execution failed");
-
-        // ScaleFC_Fix_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
-								//para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-								//para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-								//para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-								//para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-								//para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-								//para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-								//para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-								//para->getParD(level)->offFC);
-        // getLastCudaError("ScaleFC27 execution failed");
-         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //ScaleCF_Fix_27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-         //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-         //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-         //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-         //               para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-         //               para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-         //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-         //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-         //               para->getParD(level)->offCF);
-         //getLastCudaError("ScaleCF27 execution failed");
-
-         //ScaleFC_Fix_27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
-         //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-         //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-         //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-         //               para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-         //               para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-         //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-         //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-         //               para->getParD(level)->offFC);
-         //getLastCudaError("ScaleFC27 execution failed");
-         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-       //  ScaleCF_NSPress_27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-							//para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-							//para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-							//para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-							//para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-							//para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-							//para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-							//para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-							//para->getParD(level)->offCF);
-       //  getLastCudaError("ScaleCF27 execution failed");
-
-       //  ScaleFC_NSPress_27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0], 
-							//para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-							//para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-							//para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-							//para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-							//para->getParD(level)->K_FC,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
-							//para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
-							//para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
-							//para->getParD(level)->offFC);
-       //  getLastCudaError("ScaleFC27 execution failed");
-		 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            ////////////////////////////////////////////////////////////////////////
-            if (para->getDiffOn())
-            {
-               if (para->getDiffMod() == 7)
-               {
-                  //ScaleCFThS7(   para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-                  //               para->getParD(level)->d7.f[0],        para->getParD(level+1)->d7.f[0],                
-                  //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-                  //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-                  //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-                  //               para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-                  //               para->getParD(level)->K_CF,           
-                  //               para->getParD(level)->vis,            para->getParD(level+1)->diffusivity,   para->getParD(level)->numberofthreads);
-                  //getLastCudaError("ScaleCFTh7 execution failed");
-
-                  //ScaleFCThS7(   para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],
-                  //               para->getParD(level)->d7.f[0],        para->getParD(level+1)->d7.f[0],
-                  //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-                  //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-                  //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-                  //               para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-                  //               para->getParD(level)->K_FC,
-                  //               para->getParD(level)->vis,            para->getParD(level)->diffusivity,     para->getParD(level)->numberofthreads);
-                  //getLastCudaError("ScaleFCTh7 execution failed");
-                  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                  ScaleCFThSMG7( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-                                 para->getParD(level)->d7.f[0],        para->getParD(level+1)->d7.f[0],                
-                                 para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-                                 para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-                                 para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-                                 para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-                                 para->getParD(level)->K_CF,           
-                                 para->getParD(level)->vis,            para->getParD(level+1)->diffusivity,   para->getParD(level)->numberofthreads,
-                                 para->getParD(level)->offCF);
-                  getLastCudaError("ScaleCFTh7 execution failed");
-
-                  ScaleFCThSMG7( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],
-                                 para->getParD(level)->d7.f[0],        para->getParD(level+1)->d7.f[0],
-                                 para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-                                 para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-                                 para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-                                 para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-                                 para->getParD(level)->K_FC,
-                                 para->getParD(level)->vis,            para->getParD(level)->diffusivity,     para->getParD(level)->numberofthreads,
-                                 para->getParD(level)->offFC);
-                  getLastCudaError("ScaleFCTh7 execution failed");
-               } 
-               else if (para->getDiffMod() == 27)
-               {
-                  ScaleCFThS27(  para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
-                                 para->getParD(level)->d27.f[0],       para->getParD(level+1)->d27.f[0],                
-                                 para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
-                                 para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
-                                 para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-                                 para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
-                                 para->getParD(level)->K_CF,           
-								 para->getParD(level)->vis,            para->getParD(level+1)->diffusivity,   para->getParD(level)->numberofthreads,
-								 para->getParD(level)->offCF);
-                  getLastCudaError("ScaleCFTh27 execution failed");
-
-                  ScaleFCThS27(  para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],
-                                 para->getParD(level)->d27.f[0],       para->getParD(level+1)->d27.f[0],
-                                 para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
-                                 para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
-                                 para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-                                 para->getParD(level)->intFC.ICellFCC, para->getParD(level)->intFC.ICellFCF, 
-                                 para->getParD(level)->K_FC,
-								 para->getParD(level)->vis,            para->getParD(level)->diffusivity,     para->getParD(level)->numberofthreads,
-								 para->getParD(level)->offFC);
-                  getLastCudaError("ScaleFCTh27 execution failed");
-               }
-            } 
-            //////////////////////////////////////////////////////////////////////////
-
-      }
-   }
-}
+    } 
 
+}
 
+void coarseToFine(Parameter* para, int level)
+{
+    //ScaleCF_comp_D3Q27F3(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],     para->getParD(level+1)->g6.g[0],
+    //                     para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+    //                     para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+    //                     para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //                     para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 			   
+    //                     para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+    //                     para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+    //                     para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //                     para->getParD(level)->offCF);
+    //getLastCudaError("ScaleCF_comp_D3Q27F3 execution failed");
+
+	//ScaleCF_0817_comp_27(para->getParD(level)->d0SP.f[0],      para->getParD(level + 1)->d0SP.f[0],
+    //                     para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+    //                     para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+    //                     para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //                     para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF,
+    //                     para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega,
+    //                     para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny,
+    //                     para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //                     para->getParD(level)->offCF);
+    //getLastCudaError("ScaleCF_0817_comp_27 execution failed");
+
+	//ScaleCF_RhoSq_3rdMom_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+	//                              para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+	//                              para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+	//                              para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+	//                              para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+	//                              para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+	//                              para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+	//                              para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+	//                              para->getParD(level)->offCF);
+	//getLastCudaError("ScaleCF_RhoSq_3rdMom_comp_27 execution failed");
+
+	ScaleCF_RhoSq_comp_27(para->getParD(level)->d0SP.f[0],        para->getParD(level + 1)->d0SP.f[0],
+                          para->getParD(level)->neighborX_SP,     para->getParD(level)->neighborY_SP,     para->getParD(level)->neighborZ_SP,
+                          para->getParD(level + 1)->neighborX_SP, para->getParD(level + 1)->neighborY_SP, para->getParD(level + 1)->neighborZ_SP,
+                          para->getParD(level)->size_Mat_SP,      para->getParD(level + 1)->size_Mat_SP,  para->getParD(level)->evenOrOdd,
+                          para->getParD(level)->intCF.ICellCFC,   para->getParD(level)->intCF.ICellCFF,
+                          para->getParD(level)->K_CF,             para->getParD(level)->omega,            para->getParD(level + 1)->omega,
+                          para->getParD(level)->vis,              para->getParD(level)->nx,               para->getParD(level)->ny,
+                          para->getParD(level + 1)->nx,           para->getParD(level + 1)->ny,           para->getParD(level)->numberofthreads,
+                          para->getParD(level)->offCF);
+    getLastCudaError("ScaleCF27_RhoSq_comp execution failed");
+
+    //ScaleCF_AA2016_comp_27( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+    //                        para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+    //                        para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+    //                        para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //                        para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+    //                        para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+    //                        para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+    //                        para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //                        para->getParD(level)->offCF);
+    //getLastCudaError("ScaleCF_AA2016_comp_27 execution failed");
+
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// D E P R E C A T E D
+	//////////////////////////////////////////////////////////////////////////
+
+    //ScaleCF27(  para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+    //            para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP,
+    //            para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP, para->getParD(level+1)->neighborZ_SP,
+    //            para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,  para->getParD(level)->evenOrOdd,
+    //            para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+    //            para->getParD(level)->K_CF,           para->getParD(level)->omega,          para->getParD(level+1)->omega, 
+    //            para->getParD(level)->vis,            para->getParD(level)->nx,             para->getParD(level)->ny, 
+    //            para->getParD(level+1)->nx,           para->getParD(level+1)->ny,           para->getParD(level)->gridNX);
+    //getLastCudaError("ScaleCF27 execution failed");
+
+    //ScaleCFEff27(  para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+    //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+    //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+    //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //               para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+    //               para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+    //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+    //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //               para->getParD(level)->offCF);
+    //getLastCudaError("ScaleCF27 execution failed");
+
+    //ScaleCFLast27( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+    //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+    //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+    //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //               para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+    //               para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+    //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+    //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //               para->getParD(level)->offCF);
+    //getLastCudaError("ScaleCF27 execution failed");
+    
+    //ScaleCFpress27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+    //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+    //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+    //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //               para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+    //               para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+    //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+    //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //               para->getParD(level)->offCF);
+    //getLastCudaError("ScaleCF27 execution failed");
+    
+    // ScaleCF_Fix_comp_27(	para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+    //                      para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+    //                      para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+    //                      para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //                      para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+    //                      para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+    //                      para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+    //                      para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //                      para->getParD(level)->offCF);
+    // getLastCudaError("ScaleCF27 execution failed");
+    
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// incompressible
+    //ScaleCF_Fix_27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+    //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+    //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+    //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //               para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+    //               para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+    //               para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+    //               para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //               para->getParD(level)->offCF);
+    //getLastCudaError("ScaleCF27 execution failed");
+    
+    //ScaleCF_NSPress_27(para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+    //                   para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+    //                   para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+    //                   para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+    //                   para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+    //                   para->getParD(level)->K_CF,           para->getParD(level)->omega,           para->getParD(level+1)->omega, 
+    //                   para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
+    //                   para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
+    //                   para->getParD(level)->offCF);
+    //getLastCudaError("ScaleCF27 execution failed");
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// A D V E C T I O N    D I F F U S I O N
+	//////////////////////////////////////////////////////////////////////////
+
+    if (para->getDiffOn())
+    {
+        if (para->getDiffMod() == 7)
+        {
+            //ScaleCFThS7(   para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+            //               para->getParD(level)->d7.f[0],        para->getParD(level+1)->d7.f[0],                
+            //               para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+            //               para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+            //               para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+            //               para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+            //               para->getParD(level)->K_CF,           
+            //               para->getParD(level)->vis,            para->getParD(level+1)->diffusivity,   para->getParD(level)->numberofthreads);
+            //getLastCudaError("ScaleCFTh7 execution failed");
+            
+            ScaleCFThSMG7( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+                           para->getParD(level)->d7.f[0],        para->getParD(level+1)->d7.f[0],                
+                           para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+                           para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+                           para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+                           para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+                           para->getParD(level)->K_CF,           
+                           para->getParD(level)->vis,            para->getParD(level+1)->diffusivity,   para->getParD(level)->numberofthreads,
+                           para->getParD(level)->offCF);
+            getLastCudaError("ScaleCFTh7 execution failed");            
+        } 
+        else if (para->getDiffMod() == 27)
+        {
+            ScaleCFThS27( para->getParD(level)->d0SP.f[0],      para->getParD(level+1)->d0SP.f[0],                
+                          para->getParD(level)->d27.f[0],       para->getParD(level+1)->d27.f[0],                
+                          para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP,
+                          para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP,
+                          para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
+                          para->getParD(level)->intCF.ICellCFC, para->getParD(level)->intCF.ICellCFF, 
+                          para->getParD(level)->K_CF,           
+                          para->getParD(level)->vis,            para->getParD(level+1)->diffusivity,   para->getParD(level)->numberofthreads,
+                          para->getParD(level)->offCF);
+            getLastCudaError("ScaleCFTh27 execution failed");            
+        }
+    } 
 
+}
diff --git a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.h b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.h
index 1cbd11ad65f719d2ee45f2e6ef6cc76b5be0e5e0..5d404e612c9e5ce9211245ac776f517278be4532 100644
--- a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.h
+++ b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.h
@@ -10,6 +10,32 @@
 
 class Kernel;
 
-extern "C" void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaManager, std::vector<std::shared_ptr<PorousMedia>> pm, int level, int max_level, unsigned int t, std::vector < SPtr< Kernel>> kernels);
+extern "C" void updateGrid27(Parameter* para, 
+                             Communicator* comm, 
+                             CudaMemoryManager* cudaManager, 
+                             std::vector<std::shared_ptr<PorousMedia>>& pm, 
+                             int level,
+                             unsigned int t, 
+                             std::vector < SPtr< Kernel>>& kernels);
+
+extern "C" void collision(Parameter* para, std::vector<std::shared_ptr<PorousMedia>>& pm, int level, unsigned int t, std::vector < SPtr< Kernel>>& kernels);
+
+extern "C" void collisionPorousMedia(Parameter* para, std::vector<std::shared_ptr<PorousMedia>>& pm, int level);
+
+extern "C" void collisionAdvectionDiffusion(Parameter* para, int level);
+
+extern "C" void exchangeMultiGPU(Parameter* para, Communicator* comm, CudaMemoryManager* cudaManager, int level);
+
+extern "C" void postCollisionBC(Parameter* para, int level, unsigned int t);
+
+extern "C" void swapBetweenEvenAndOddTimestep(Parameter* para, int level);
+
+extern "C" void calcMacroscopicQuantities(Parameter* para, int level);
+
+extern "C" void preCollisionBC(Parameter* para, CudaMemoryManager* cudaManager, int level, unsigned int t);
+
+extern "C" void fineToCoarse(Parameter* para, int level);
+
+extern "C" void coarseToFine(Parameter* para, int level);
 
 #endif
diff --git a/src/VirtualFluids_GPU/LBM/LB.h b/src/VirtualFluids_GPU/LBM/LB.h
index e19395c8abc92ab722fba0ec0bc831fce932ae2a..4ce6b1ff2d97f56d649e4c755a559360e808a111 100644
--- a/src/VirtualFluids_GPU/LBM/LB.h
+++ b/src/VirtualFluids_GPU/LBM/LB.h
@@ -166,7 +166,7 @@ typedef struct QforBC{
    real* qread;
    real* q27[27];
    real* q19[19];
-   int kQ;
+   int kQ=0;
    int kArray;
    real *Vx, *Vy, *Vz, *deltaVz, *RhoBC;
 }QforBoundaryConditions;
@@ -175,7 +175,7 @@ typedef struct QforBC{
 typedef struct TempforBC{
    int* k;
    real* temp;
-   int kTemp;
+   int kTemp=0;
 }TempforBoundaryConditions;
 
 //BCTempVel
@@ -184,7 +184,7 @@ typedef struct TempVelforBC{
    real* temp;
    real* tempPulse;
    real* velo;
-   int kTemp;
+   int kTemp=0;
 }TempVelforBoundaryConditions;
 
 //BCTempPress
@@ -192,7 +192,7 @@ typedef struct TempPressforBC{
    int* k;
    real* temp;
    real* velo;
-   int kTemp;
+   int kTemp=0;
 }TempPressforBoundaryConditions;
 
 //measurePoints
diff --git a/src/VirtualFluids_GPU/LBM/Simulation.cpp b/src/VirtualFluids_GPU/LBM/Simulation.cpp
index dd8b0fe5883fac6bd22698aff113a3d0d5b0bf3e..9a81ec6f3c568dd4bced3e5132b36227a28378bf 100644
--- a/src/VirtualFluids_GPU/LBM/Simulation.cpp
+++ b/src/VirtualFluids_GPU/LBM/Simulation.cpp
@@ -199,7 +199,7 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std
    //////////////////////////////////////////////////////////////////////////
    //Allocate Memory for Drag Lift Calculation
    //////////////////////////////////////////////////////////////////////////
-   //allocDragLift(para);
+   if (para->getCalcDragLift()) allocDragLift(para.get(), cudaManager.get());
 
 
    //////////////////////////////////////////////////////////////////////////
@@ -434,1521 +434,206 @@ void Simulation::run()
 	////////////////////////////////////////////////////////////////////////////////
 	for(t=para->getTStart();t<=para->getTEnd();t++)
 	{
-		getLastCudaError("before starting a kernel we get an execution failed");
-		if (para->getMaxLevel()>=1)
-        {
-            updateGrid27(para.get(), comm, cudaManager.get(), pm, 1, para->getMaxLevel(), t, kernels);
-        }
-
-        ////////////////////////////////////////////////////////////////////////////////
-        // Collision and Propagation
-        //////////////////////////////////////////////////////////////////////////////// 
-
-		//////////////////////////////////////////////////////////////////////////
-		//////////////////////////////////////////////////////////////////////////
-		//////////////////////////////////////////////////////////////////////////
-		//////////////////////////////////////////////////////////////////////////
-		
-		kernels.at(0)->run();
-		 
-		//////////////////////////////////////////////////////////////////////////
-		//////////////////////////////////////////////////////////////////////////
-		//////////////////////////////////////////////////////////////////////////
-		//////////////////////////////////////////////////////////////////////////
-
-
-
-     
-		 //if (t>para->getStartTurn()){
-			// //////////////////////////////////////////////////////////////////////////
-			// QVelDevice1h27(    para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-			//					para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,   para->getParD(0)->Qinflow.Vz,
-			//					para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-			//					para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,          
-			//					para->getPhi(),                    para->getAngularVelocity(),
-			//					para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//					para->getParD(0)->coordX_SP,       para->getParD(0)->coordY_SP,    para->getParD(0)->coordZ_SP,
-			//					para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		 //     getLastCudaError("QVelDev27 execution failed");
-			//  //////////////////////////////////////////////////////////////////////////
-		 //}
-		 //else{
-			// //////////////////////////////////////////////////////////////////////////
-
-			// //////////////////////////////////////////////////////////////////////////
-			// QVelDevice1h27(    para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-			//					para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,   para->getParD(0)->Qinflow.Vz,
-			//					para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-			//					para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,          
-			//					para->getPhi(),                    (real)0.0,
-			//					para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//					para->getParD(0)->coordX_SP,       para->getParD(0)->coordY_SP,    para->getParD(0)->coordZ_SP,
-			//					para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		 //     getLastCudaError("QVelDev27 execution failed");
-			//  //////////////////////////////////////////////////////////////////////////
-		 //}
-
-		
-		 //////////////////////////////////////////////////////////////////////////
-		 //comp
-
-
-		//CumulantOneChimCompSP27(
-		//	para->getParD(0)->numberofthreads,
-		//	para->getParD(0)->omega,
-		//	para->getParD(0)->geoSP,
-		//	para->getParD(0)->neighborX_SP, 
-		//	para->getParD(0)->neighborY_SP, 
-		//	para->getParD(0)->neighborZ_SP,
-		//	para->getParD(0)->d0SP.f[0],
-		//	para->getParD(0)->size_Mat_SP,
-		//	para->getParD(0)->size_Mat_SP,
-		//	0,
-		//	para->getForcesDev(),
-		//	para->getParD(0)->evenOrOdd);
-
-		//CumulantOnePreconditionedChimCompSP27(
-		//	para->getParD(0)->numberofthreads,
-		//	para->getParD(0)->omega,
-		//	para->getParD(0)->geoSP,
-		//	para->getParD(0)->neighborX_SP, 
-		//	para->getParD(0)->neighborY_SP, 
-		//	para->getParD(0)->neighborZ_SP,
-		//	para->getParD(0)->d0SP.f[0],
-		//	para->getParD(0)->size_Mat_SP,
-		//	para->getParD(0)->size_Mat_SP,
-		//	0,
-		//	para->getForcesDev(),
-		//	para->getParD(0)->evenOrOdd);
-
-		//KernelKumCompSRTSP27(
-		//	para->getParD(0)->numberofthreads,
-		//	para->getParD(0)->omega,
-		//	para->getParD(0)->geoSP,
-		//	para->getParD(0)->neighborX_SP,
-		//	para->getParD(0)->neighborY_SP,
-		//	para->getParD(0)->neighborZ_SP,
-		//	para->getParD(0)->d0SP.f[0],
-		//	para->getParD(0)->size_Mat_SP,
-		//	0,
-		//	para->getForcesDev(),
-		//	para->getParD(0)->evenOrOdd);
-
-
-         ////////////////////////////////////////////////////////////////////////////////
-		 //output << "fertig \n";
-		 ////////////////////////////////////////////////////////////////////////////////
-         if (para->getDiffOn()==true)
-         {
-            if (para->getDiffMod() == 7)
-            {
-				//output << " Diff Mod 7\n";
-			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   // incomp
-			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion kernel
+        updateGrid27(para.get(), comm, cudaManager.get(), pm, 0, t, kernels);
 
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion boundary condition
-               QNoSlipADincompDev7( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-									para->getParD(0)->d0SP.f[0],             para->getParD(0)->d7.f[0],      para->getParD(0)->Temp.temp,  
-									para->getParD(0)->diffusivity,           para->getParD(0)->Temp.k,       para->getParD(0)->QGeom.q27[0], 
-									para->getParD(0)->Temp.kTemp,            para->getParD(0)->Temp.kTemp,   para->getParD(0)->omega,
-									para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-									para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-               getLastCudaError("QNoSlipADincompDev7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + velocity boundary condition
-			   if (t<15580)//(t>500000 && t<515580)//(t>300000 && t<315580)
-			   {
-                 QADVeloIncompDev7(para->getParD(0)->numberofthreads,    para->getParD(0)->nx,				para->getParD(0)->ny,
-								   para->getParD(0)->d0SP.f[0],          para->getParD(0)->d7.f[0],			para->getParD(0)->TempVel.tempPulse, 
-								   para->getParD(0)->TempVel.velo,       para->getParD(0)->diffusivity,		para->getParD(0)->TempVel.k,
-								   para->getParD(0)->Qinflow.q27[0],     para->getParD(0)->TempVel.kTemp,	para->getParD(0)->TempVel.kTemp,  
-								   para->getParD(0)->omega,              para->getParD(0)->neighborX_SP,	para->getParD(0)->neighborY_SP, 
-								   para->getParD(0)->neighborZ_SP,       para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-				 getLastCudaError("QADVeloIncompDev7 execution failed");
-
-			   }
-			   else
-			   {
-                 QADVeloIncompDev7(para->getParD(0)->numberofthreads,    para->getParD(0)->nx,				para->getParD(0)->ny,
-								   para->getParD(0)->d0SP.f[0],          para->getParD(0)->d7.f[0],			para->getParD(0)->TempVel.temp, 
-								   para->getParD(0)->TempVel.velo,       para->getParD(0)->diffusivity,		para->getParD(0)->TempVel.k,
-								   para->getParD(0)->Qinflow.q27[0],     para->getParD(0)->TempVel.kTemp,	para->getParD(0)->TempVel.kTemp,  
-								   para->getParD(0)->omega,              para->getParD(0)->neighborX_SP,	para->getParD(0)->neighborY_SP, 
-								   para->getParD(0)->neighborZ_SP,       para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-                 getLastCudaError("QADVeloIncompDev7 execution failed");
+	    ////////////////////////////////////////////////////////////////////////////////
+	    //Particles
+	    ////////////////////////////////////////////////////////////////////////////////
+	    if (para->getCalcParticle()) propagateParticles(para.get(), t);
+	    ////////////////////////////////////////////////////////////////////////////////
 
-			   }
-           //    QADVeloIncompDev7(  para->getParD(0)->numberofthreads,    para->getParD(0)->nx,				para->getParD(0)->ny,
-								   //para->getParD(0)->d0SP.f[0],          para->getParD(0)->d7.f[0],			para->getParD(0)->TempVel.tempPulse, 
-								   //para->getParD(0)->TempVel.velo,       para->getParD(0)->diffusivity,		para->getParD(0)->TempVel.k,
-								   //para->getParD(0)->Qinflow.q27[0],     para->getParD(0)->TempVel.kTemp,	para->getParD(0)->TempVel.kTemp,  
-								   //para->getParD(0)->omega,              para->getParD(0)->neighborX_SP,	para->getParD(0)->neighborY_SP, 
-								   //para->getParD(0)->neighborZ_SP,       para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-           //    getLastCudaError("QADVeloIncompDev7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + velocity boundary condition
-               QADPressIncompDev7(   para->getParD(0)->numberofthreads,  para->getParD(0)->nx,				para->getParD(0)->ny,
-									 para->getParD(0)->d0SP.f[0],        para->getParD(0)->d7.f[0],			para->getParD(0)->TempPress.temp, 
-									 para->getParD(0)->TempPress.velo,   para->getParD(0)->diffusivity,		para->getParD(0)->TempPress.k,
-									 para->getParD(0)->QPress.q27[0],    para->getParD(0)->TempPress.kTemp, para->getParD(0)->TempPress.kTemp,  
-									 para->getParD(0)->omega,            para->getParD(0)->neighborX_SP,	para->getParD(0)->neighborY_SP, 
-									 para->getParD(0)->neighborZ_SP,     para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-               getLastCudaError("QADPressIncompDev7 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-			   
 
-			   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   //// comp
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion kernel
- 
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion boundary condition
-               QADDev7( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-                        para->getParD(0)->d0SP.f[0],             para->getParD(0)->d7.f[0],      para->getParD(0)->Temp.temp,  
-                        para->getParD(0)->diffusivity,           para->getParD(0)->Temp.k,       para->getParD(0)->QGeom.q27[0], 
-                        para->getParD(0)->Temp.kTemp,            para->getParD(0)->Temp.kTemp,   para->getParD(0)->omega,
-                        para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-                        para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-               getLastCudaError("QADDev27 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + velocity boundary condition
-               QADVelDev7( para->getParD(0)->numberofthreads,    para->getParD(0)->nx,				para->getParD(0)->ny,
-                           para->getParD(0)->d0SP.f[0],          para->getParD(0)->d7.f[0],			para->getParD(0)->TempVel.temp, 
-                           para->getParD(0)->TempVel.velo,       para->getParD(0)->diffusivity,		para->getParD(0)->TempVel.k,
-                           para->getParD(0)->Qinflow.q27[0],     para->getParD(0)->TempVel.kTemp,     para->getParD(0)->TempVel.kTemp,  
-                           para->getParD(0)->omega,              para->getParD(0)->neighborX_SP,		para->getParD(0)->neighborY_SP, 
-                           para->getParD(0)->neighborZ_SP,       para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-               getLastCudaError("QADVelDev27 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + velocity boundary condition
-               QADPressDev7( para->getParD(0)->numberofthreads,  para->getParD(0)->nx,				para->getParD(0)->ny,
-                             para->getParD(0)->d0SP.f[0],        para->getParD(0)->d7.f[0],			para->getParD(0)->TempPress.temp, 
-                             para->getParD(0)->TempPress.velo,   para->getParD(0)->diffusivity,		para->getParD(0)->TempPress.k,
-                             para->getParD(0)->QPress.q27[0],    para->getParD(0)->TempPress.kTemp,   para->getParD(0)->TempPress.kTemp,  
-                             para->getParD(0)->omega,            para->getParD(0)->neighborX_SP,		para->getParD(0)->neighborY_SP, 
-                             para->getParD(0)->neighborZ_SP,     para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-               getLastCudaError("QADPressDev27 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            } 
-            else if (para->getDiffMod() == 27)
-            {
-			   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   //// incomp
-			   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion kernel
 
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-          //     //advection diffusion boundary condition
-               QNoSlipADincompDev27( para->getParD(0)->numberofthreads,      para->getParD(0)->nx,           para->getParD(0)->ny,
-									 para->getParD(0)->d0SP.f[0],            para->getParD(0)->d27.f[0],     para->getParD(0)->Temp.temp,  
-									 para->getParD(0)->diffusivity,          para->getParD(0)->Temp.k,       para->getParD(0)->QGeom.q27[0], 
-									 para->getParD(0)->Temp.kTemp,           para->getParD(0)->Temp.kTemp,   para->getParD(0)->omega,
-									 para->getParD(0)->neighborX_SP,         para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-									 para->getParD(0)->size_Mat_SP,          para->getParD(0)->evenOrOdd);
-               getLastCudaError("QNoSlipADincompDev27 execution failed");
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + velocity boundary condition
-			   if (t>1600000 && t<1662320)//(t>400000 && t<415580)//(t>500000 && t<515580)//(t>300000 && t<315580)//(t<15580)//
-			   {
-				   QADVeloIncompDev27( para->getParD(0)->numberofthreads,    para->getParD(0)->nx,				para->getParD(0)->ny,
-									   para->getParD(0)->d0SP.f[0],          para->getParD(0)->d27.f[0],		para->getParD(0)->TempVel.tempPulse, 
-									   para->getParD(0)->TempVel.velo,       para->getParD(0)->diffusivity,		para->getParD(0)->TempVel.k,
-									   para->getParD(0)->Qinflow.q27[0],     para->getParD(0)->TempVel.kTemp,   para->getParD(0)->TempVel.kTemp,  
-									   para->getParD(0)->omega,              para->getParD(0)->neighborX_SP,	para->getParD(0)->neighborY_SP, 
-									   para->getParD(0)->neighborZ_SP,       para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-				   getLastCudaError("QADVeloIncompDev27 execution failed");
-			   }
-			   else
-			   {
-				   QADVeloIncompDev27( para->getParD(0)->numberofthreads,    para->getParD(0)->nx,				para->getParD(0)->ny,
-									   para->getParD(0)->d0SP.f[0],          para->getParD(0)->d27.f[0],		para->getParD(0)->TempVel.temp, 
-									   para->getParD(0)->TempVel.velo,       para->getParD(0)->diffusivity,		para->getParD(0)->TempVel.k,
-									   para->getParD(0)->Qinflow.q27[0],     para->getParD(0)->TempVel.kTemp,   para->getParD(0)->TempVel.kTemp,  
-									   para->getParD(0)->omega,              para->getParD(0)->neighborX_SP,	para->getParD(0)->neighborY_SP, 
-									   para->getParD(0)->neighborZ_SP,       para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-				   getLastCudaError("QADVeloIncompDev27 execution failed");
-			   }
-           //    QADVeloIncompDev27( para->getParD(0)->numberofthreads,    para->getParD(0)->nx,				para->getParD(0)->ny,
-								   //para->getParD(0)->d0SP.f[0],          para->getParD(0)->d27.f[0],		para->getParD(0)->TempVel.temp, 
-								   //para->getParD(0)->TempVel.velo,       para->getParD(0)->diffusivity,		para->getParD(0)->TempVel.k,
-								   //para->getParD(0)->Qinflow.q27[0],     para->getParD(0)->TempVel.kTemp,   para->getParD(0)->TempVel.kTemp,  
-								   //para->getParD(0)->omega,              para->getParD(0)->neighborX_SP,	para->getParD(0)->neighborY_SP, 
-								   //para->getParD(0)->neighborZ_SP,       para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-           //    getLastCudaError("QADVeloIncompDev27 execution failed");
-               //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //advection diffusion + pressure boundary condition
-           //    QADPressIncompDev27(   para->getParD(0)->numberofthreads,  para->getParD(0)->nx,					para->getParD(0)->ny,
-									  //para->getParD(0)->d0SP.f[0],        para->getParD(0)->d27.f[0],			para->getParD(0)->TempPress.temp, 
-									  //para->getParD(0)->TempPress.velo,   para->getParD(0)->diffusivity,		para->getParD(0)->TempPress.k,
-									  //para->getParD(0)->QPress.q27[0],    para->getParD(0)->TempPress.kTemp,    para->getParD(0)->TempPress.kTemp,  
-									  //para->getParD(0)->omega,            para->getParD(0)->neighborX_SP,		para->getParD(0)->neighborY_SP, 
-									  //para->getParD(0)->neighborZ_SP,     para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-           //    getLastCudaError("QADPressIncompDev27 execution failed");
-               //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-			   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			   //////// comp
-              ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-              //advection diffusion kernel
-                           
-              ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-              //advection diffusion boundary condition
-              //QADBBDev27(para->getParD(0)->numberofthreads,      para->getParD(0)->nx,           para->getParD(0)->ny,
-              //           para->getParD(0)->d0SP.f[0],            para->getParD(0)->d27.f[0],     para->getParD(0)->Temp.temp,  
-              //           para->getParD(0)->diffusivity,          para->getParD(0)->Temp.k,       para->getParD(0)->QGeom.q27[0], 
-              //           para->getParD(0)->Temp.kTemp,           para->getParD(0)->Temp.kTemp,   para->getParD(0)->omega,
-              //           para->getParD(0)->neighborX_SP,         para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-              //           para->getParD(0)->size_Mat_SP,          para->getParD(0)->evenOrOdd);
-              //getLastCudaError("QADBBDev27 execution failed");
-              ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-              //advection diffusion + velocity boundary condition
-			   //if (t>400000 && t<415580)//(t>100000 && t<103895)//(t>1600000 && t<1662317)//(t>500000 && t<515580)//(t<1000)//(t<15580)//(t>400000 && t<415580)//
-			   //{
-				  // QADVelDev27(para->getParD(0)->numberofthreads,    para->getParD(0)->nx,				para->getParD(0)->ny,
-						//	   para->getParD(0)->d0SP.f[0],          para->getParD(0)->d27.f[0],		para->getParD(0)->TempVel.tempPulse, 
-						//	   para->getParD(0)->TempVel.velo,       para->getParD(0)->diffusivity,		para->getParD(0)->Qinflow.k,
-						//	   para->getParD(0)->Qinflow.q27[0],     para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,  
-						//	   para->getParD(0)->omega,              para->getParD(0)->neighborX_SP,	para->getParD(0)->neighborY_SP, 
-						//	   para->getParD(0)->neighborZ_SP,       para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-				  // getLastCudaError("QADVelDev27 execution failed");
-			   //}
-			   //else
-			   //{
-				  // QADVelDev27(para->getParD(0)->numberofthreads,    para->getParD(0)->nx,				para->getParD(0)->ny,
-						//	   para->getParD(0)->d0SP.f[0],          para->getParD(0)->d27.f[0],		para->getParD(0)->TempVel.temp, 
-						//	   para->getParD(0)->TempVel.velo,       para->getParD(0)->diffusivity,		para->getParD(0)->Qinflow.k,
-						//	   para->getParD(0)->Qinflow.q27[0],     para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,  
-						//	   para->getParD(0)->omega,              para->getParD(0)->neighborX_SP,	para->getParD(0)->neighborY_SP, 
-						//	   para->getParD(0)->neighborZ_SP,       para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-				  // getLastCudaError("QADVelDev27 execution failed");
-			   //}
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //         //advection diffusion + velocity boundary condition
-      //         //QADPressDev27( para->getParD(0)->numberofthreads,  para->getParD(0)->nx,				para->getParD(0)->ny,
-      //         //               para->getParD(0)->d0SP.f[0],        para->getParD(0)->d27.f[0],			para->getParD(0)->TempPress.temp, 
-      //         //               para->getParD(0)->TempPress.velo,   para->getParD(0)->diffusivity,		para->getParD(0)->TempPress.k,
-      //         //               para->getParD(0)->QPress.q27[0],    para->getParD(0)->TempPress.kTemp,  para->getParD(0)->TempPress.kTemp,  
-      //         //               para->getParD(0)->omega,            para->getParD(0)->neighborX_SP,		para->getParD(0)->neighborY_SP, 
-      //         //               para->getParD(0)->neighborZ_SP,     para->getParD(0)->size_Mat_SP,		para->getParD(0)->evenOrOdd);
-      //         //getLastCudaError("QADPressDev27 execution failed");
-      //         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            }
-         }
-		//////////////////////////////////////////////////////////////////////////////
-		if (para->getNumprocs() > 1)
-		{
-			////1D domain decomposition
-			//exchangePostCollDataGPU27(para, comm, 0);
-			//////////////////////////////////////////////////////////////////////////
-			//3D domain decomposition
-			//output << "start exchange Post X (level 0) \n";
-			exchangePostCollDataXGPU27(para.get(), comm, cudaManager.get(), 0);
-			//output << "end exchange Post X (level 0) \n";
-			//output << "start exchange Post Y (level 0) \n";
-			exchangePostCollDataYGPU27(para.get(), comm, cudaManager.get(), 0);
-			//output << "end exchange Post Y (level 0) \n";
-			//output << "start exchange Post Z (level 0) \n";
-			exchangePostCollDataZGPU27(para.get(), comm, cudaManager.get(), 0);
-			//output << "end exchange Post Z (level 0) \n";
-			////////////////////////////////////////////////////////////////////////
-			//3D domain decomposition convection diffusion
-			if (para->getDiffOn()==true)
-			{
-				exchangePostCollDataADXGPU27(para.get(), comm, cudaManager.get(), 0);
-				exchangePostCollDataADYGPU27(para.get(), comm, cudaManager.get(), 0);
-				exchangePostCollDataADZGPU27(para.get(), comm, cudaManager.get(), 0);
-			}
-			if (para->getIsF3())
-			{
-				exchangeCollDataF3XGPU(para.get(), comm, cudaManager.get(), 0);
-				exchangeCollDataF3YGPU(para.get(), comm, cudaManager.get(), 0);
-				exchangeCollDataF3ZGPU(para.get(), comm, cudaManager.get(), 0);
-			}
-		}
-		////////////////////////////////////////////////////////////////////////////////
-		//PressX0
-		//QPressDevOld27(	para->getParD(0)->numberofthreads, para->getParD(0)->QpressX0.RhoBC, 
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QpressX0.k,  
-		//				para->getParD(0)->QpressX0.kN,     para->getParD(0)->QpressX0.kQ,  para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDev27 execution failed");
-		//////////////////////////////////////////////////////////////////////////////
-		//PressX1
-		//QPressDevOld27(	para->getParD(0)->numberofthreads, para->getParD(0)->QpressX1.RhoBC, 
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QpressX1.k,  
-		//				para->getParD(0)->QpressX1.kN,     para->getParD(0)->QpressX1.kQ,  para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDev27 execution failed");
         ////////////////////////////////////////////////////////////////////////////////
-		//output << "vor der DruckRB\n";
-		//Ship
-		//QPressDevOld27( para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,  
-		//				para->getParD(0)->QPress.kN,       para->getParD(0)->QPress.kQ,    para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDev27 execution failed");
-        ////////////////////////////////////////////////////////////////////////////////
-		//Andrea - Soeren
-		//QPressDevZero27(para->getParD(0)->numberofthreads, para->getParD(0)->d0SP.f[0],       
-		//				para->getParD(0)->QPress.k,  	   para->getParD(0)->QPress.kQ,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDev27 execution failed");
-		//QPressDevOld27( para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,  
-		//				para->getParD(0)->QPress.kN,       para->getParD(0)->QPress.kQ,    para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDev27 execution failed");
-        ////////////////////////////////////////////////////////////////////////////////
-			//QDev27( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-			//		para->getParD(0)->d0SP.f[0],             para->getParD(0)->QWall.k,		 para->getParD(0)->QWall.q27[0], 
-			//		para->getParD(0)->kQ,                    para->getParD(0)->kQ,           para->getParD(0)->omega,
-			//		para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//		para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-			//getLastCudaError("QDev27 execution failed");
-		//???????????????????????????????????????????
-		//WallFuncDev27(  para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-		//				para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,   para->getParD(0)->Qinflow.Vz,
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-		//				para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("WallFuncDev27 execution failed");
-		//WallFuncDev27(  para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-		//				para->getParD(0)->QGeom.Vx,        para->getParD(0)->QGeom.Vy,     para->getParD(0)->QGeom.Vz,
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QGeom.k,      para->getParD(0)->QGeom.q27[0], 
-		//				para->getParD(0)->QGeom.kQ,        para->getParD(0)->QGeom.kQ,     para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("WallFuncDev27 execution failed");
-		//???????????????????????????????????????????
-		////////////////////////////////////////////////////////////////////////////////
-		      //QVelDevice1h27(   para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-								//para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,   para->getParD(0)->Qinflow.Vz,
-								//para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-								//para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,          
-								//para->getPhi(),                    para->getAngularVelocity(),
-								//para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-								//para->getParD(0)->coordX_SP,       para->getParD(0)->coordY_SP,    para->getParD(0)->coordZ_SP,
-								//para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		      //getLastCudaError("QVelDev27 execution failed");
-		//???????????????????????????????????????????
-		    //  QVelDev27(para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-		    //            para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,   para->getParD(0)->Qinflow.Vz,
-		    //            para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-						//para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,
-		    //            para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		    //            para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		    //  getLastCudaError("QVelDev27 execution failed");
-		     // QVelDevComp27(para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-							//para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,   para->getParD(0)->Qinflow.Vz,
-							//para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-							//para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,
-							//para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-							//para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		     // getLastCudaError("QVelDevComp27 execution failed");
-		     // QVelDevComp27(para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-							//para->getParD(0)->QGeom.Vx,        para->getParD(0)->QGeom.Vy,     para->getParD(0)->QGeom.Vz,
-							//para->getParD(0)->d0SP.f[0],       para->getParD(0)->QGeom.k,      para->getParD(0)->QGeom.q27[0], 
-							//para->getParD(0)->QGeom.kQ,        para->getParD(0)->QGeom.kQ,     para->getParD(0)->omega,
-							//para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-							//para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		     // getLastCudaError("QVelDevComp27 execution failed");
-		      QVelDevCompZeroPress27(para->getParD(0)->numberofthreads, para->getParD(0)->nx,             para->getParD(0)->ny,
-									 para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,     para->getParD(0)->Qinflow.Vz,
-									 para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,      para->getParD(0)->Qinflow.q27[0], 
-									 para->getParD(0)->kInflowQ,        para->getParD(0)->Qinflow.kArray, para->getParD(0)->omega,
-									 para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP,   para->getParD(0)->neighborZ_SP,
-									 para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		      getLastCudaError("QVelDevComp27 execution failed");
-
-			  //QVelDevicePlainBB27(
-				 // para->getParD(0)->numberofthreads,
-				 // para->getParD(0)->Qinflow.Vx,      
-				 // para->getParD(0)->Qinflow.Vy,     
-				 // para->getParD(0)->Qinflow.Vz,
-				 // para->getParD(0)->d0SP.f[0],       
-				 // para->getParD(0)->Qinflow.k,      
-				 // para->getParD(0)->Qinflow.q27[0], 
-				 // para->getParD(0)->kInflowQ,        
-				 // para->getParD(0)->Qinflow.kArray, 
-				 // para->getParD(0)->omega,
-				 // para->getParD(0)->neighborX_SP,    
-				 // para->getParD(0)->neighborY_SP,   
-				 // para->getParD(0)->neighborZ_SP,
-				 // para->getParD(0)->size_Mat_SP,     
-				 // para->getParD(0)->evenOrOdd);
-		   //   getLastCudaError("QVelDevComp27 execution failed");
-
-			  ////////////////////////////////////////////////////////////////////////////
-		      //QVeloDevEQ27(para->getParD(0)->numberofthreads,
-						  // para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,   para->getParD(0)->Qinflow.Vz,
-						  // para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k, 
-						  // para->getParD(0)->kInflowQ,        para->getParD(0)->omega,
-						  // para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-						  // para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		      //getLastCudaError("QVeloDevEQ27 execution failed");
-			  ////////////////////////////////////////////////////////////////////////////
-
-
-			//  ////////////////////////////////////////////////////////////////////////////
-		 //   if ((para->getParD(0)->QGeom.kQ) > 0 && (para->getIsGeometryValues()))
-			//{
-			//  //QVelDevCompZeroPress27(	para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-			//		//					para->getParD(0)->QGeom.Vx,        para->getParD(0)->QGeom.Vy,     para->getParD(0)->QGeom.Vz,
-			//		//					para->getParD(0)->d0SP.f[0],       para->getParD(0)->QGeom.k,      para->getParD(0)->QGeom.q27[0], 
-			//  //							para->getParD(0)->QGeom.kQ,        para->getParD(0)->QGeom.kQ,     para->getParD(0)->omega,
-			//		//					para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//		//					para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			//  //getLastCudaError("QVelDevCompZeroPress27 execution failed");
-			//  //////////////////////////////////////////////////////////////////////////
-			//   QVelDevCompPlusSlip27( para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-			//						  para->getParD(0)->QGeom.Vx,        para->getParD(0)->QGeom.Vy,     para->getParD(0)->QGeom.Vz,
-			//						  para->getParD(0)->d0SP.f[0],       para->getParD(0)->QGeom.k,      para->getParD(0)->QGeom.q27[0], 
-			//						  para->getParD(0)->QGeom.kQ,        para->getParD(0)->QGeom.kQ,     para->getParD(0)->omega,
-			//						  para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//						  para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			//   getLastCudaError("QVelDevCompPlusSlip27 execution failed");
-
-			//}
+        // run Analyzers for kinetic energy and enstrophy for TGV in 3D
+        // these analyzers only work on level 0
+	    ////////////////////////////////////////////////////////////////////////////////
+        if( this->kineticEnergyAnalyzer || this->enstrophyAnalyzer ) exchangeMultiGPU(para.get(), comm, cudaManager.get(), 0);
 
-		////////////////////////////////////////////////////////////////////////////////
-		//QPressDevOld27( para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,  
-		//				para->getParD(0)->QPress.kN,       para->getParD(0)->QPress.kQ,    para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QOutletPressDev27 execution failed");
+	    if( this->kineticEnergyAnalyzer ) this->kineticEnergyAnalyzer->run(t);
+	    if( this->enstrophyAnalyzer     ) this->enstrophyAnalyzer->run(t);
 	    ////////////////////////////////////////////////////////////////////////////////
-		//QPressDevZero27(para->getParD(0)->numberofthreads, para->getParD(0)->d0SP.f[0],       
-		//				para->getParD(0)->QPress.k,  	   para->getParD(0)->QPress.kQ,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDev27 execution failed");
-        ////////////////////////////////////////////////////////////////////////////////
-		//Inlet - Outlet
-		//QPressDevOld27( para->getParD(0)->numberofthreads, para->getParD(0)->QInlet.RhoBC, 
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QInlet.k,  
-		//				para->getParD(0)->QInlet.kN,       para->getParD(0)->QInlet.kQ,    para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QInletPressDev27 execution failed");
-		//QPressDevOld27( para->getParD(0)->numberofthreads, para->getParD(0)->QOutlet.RhoBC, 
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QOutlet.k,  
-		//				para->getParD(0)->QOutlet.kN,      para->getParD(0)->QOutlet.kQ,   para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QOutletPressDev27 execution failed");
-		//QPressDevZero27(para->getParD(0)->numberofthreads, para->getParD(0)->d0SP.f[0],       
-		//				para->getParD(0)->QOutlet.k,  	   para->getParD(0)->QOutlet.kQ,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDev27 execution failed");
-		////////////////////////////////////////////////////////////////////////////////
-         //if (  myid == numprocs - 1)  
-		//QPressDev27_IntBB(  para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC,
-		//					para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,       para->getParD(0)->QPress.q27[0], 
-		//					para->getParD(0)->QPress.kQ,       para->getParD(0)->QPress.kQ,      para->getParD(0)->omega,
-		//					para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP,   para->getParD(0)->neighborZ_SP,
-		//					para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDev27_IntBB X1 coarse execution failed");
-         //   QPressDevOld27(para->getParD(0)->numberofthreads, para->getParD(0)->Qoutflow.RhoBC, 
-         //                  para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qoutflow.k,  
-						   //para->getParD(0)->Qoutflow.kN,     para->getParD(0)->kOutflowQ,    para->getParD(0)->omega,
-         //                  para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-         //                  para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-         //   getLastCudaError("QPressDev27 execution failed");
-            //QPressDevDirDepBot27( para->getParD(0)->numberofthreads,       RhoBCOutflowD,
-            //                      para->getParD(0)->d0SP.f[0],    QoutflowD.k, kOutflowQ, ic.s9,
-            //                      para->getParD(0)->neighborX_SP, para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-            //                      para->getParD(0)->size_Mat_SP,  para->getParD(0)->evenOrOdd);
-            //getLastCudaError("QPressDev27 execution failed");
-            //QPressDevFixBackflow27( para->getParD(0)->numberofthreads,       RhoBCOutflowD,
-            //                        para->getParD(0)->d0SP.f[0],    QoutflowD.k, kOutflowQ, ic.s9,
-            //                        para->getParD(0)->neighborX_SP, para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-            //                        para->getParD(0)->size_Mat_SP,  para->getParD(0)->evenOrOdd);
-            //getLastCudaError("QPressDev27 execution failed");
-            //   QPressDev27(para->getParD(0)->numberofthreads,   para->getParD(0)->nx, para->getParD(0)->ny,
-            //               RhoBCOutflowD,
-            //               para->getParD(0)->d0SP.f[0],  QoutflowD.k, QoutflowD.q27[0], kOutflowQ, kOutflowQ, ic.s9,
-            //               para->getParD(0)->neighborX_SP, para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-            //               para->getParD(0)->size_Mat_SP, para->getParD(0)->evenOrOdd);
-            //getLastCudaError("QPressDev27 execution failed");
-            //   QPressDev27(para->getParD(0)->numberofthreads,   para->getParD(0)->nx, para->getParD(0)->ny,
-            //               RhoBCOutflowD,
-            //               para->getParD(0)->d0.f[0],  QoutflowD.k, QoutflowD.q27[0], kOutflowQ, kOutflowQ, ic.s9,
-            //               para->getParD(0)->neighborX, para->getParD(0)->neighborY, para->getParD(0)->neighborZ,
-            //               para->getParD(0)->size_Mat, para->getParD(0)->evenOrOdd);
-            //getLastCudaError("Kernel execution failed");
-            //   BcPress27( para->getParD(0)->nx,  para->getParD(0)->ny,      para->getParD(0)->gridNZ-1, para->getParD(0)->gridNX,  para->getParD(0)->gridNY, 
-            //   para->getParD(0)->geo,     para->getParD(0)->neighborX, para->getParD(0)->neighborY, para->getParD(0)->neighborZ,
-            //   para->getParD(0)->d0.f[0], para->getParD(0)->size_Mat, para->getParD(0)->evenOrOdd );
-            //getLastCudaError("Kernel execution failed");
-         ////////////////////////////////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////////////
-         //if (  myid == 0) 
-         //   QVelDeviceCouhette27(para->getParD(0)->numberofthreads, para->getParD(0)->Qinflow.Vx,   para->getParD(0)->Qinflow.Vy,     para->getParD(0)->Qinflow.Vz,
-								 //para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-								 //para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,
-								 //para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-								 //para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-         //   getLastCudaError("QVelDeviceCouhette27 execution failed");
-        //    QVelDevicePlainBB27(para->getParD(0)->numberofthreads, para->getParD(0)->Qinflow.Vx,   para->getParD(0)->Qinflow.Vy,     para->getParD(0)->Qinflow.Vz,
-								//para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-								//para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,
-								//para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-								//para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-        //    getLastCudaError("QVelDevPlainBB27 execution failed");
-      //      QVelDev27(  para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-      //                  para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,   para->getParD(0)->Qinflow.Vz,
-      //                  para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-						//para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,
-      //                  para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-      //                  para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-      //      getLastCudaError("QVelDev27 execution failed");
-            //QVelDev27(para->getParD(0)->numberofthreads,   para->getParD(0)->nx, para->getParD(0)->ny,
-            //          VxInflowD, VyInflowD, VzInflowD,
-            //          para->getParD(0)->d0.f[0],  QinflowD.k, QinflowD.q27[0], kInflowQ, kInflowQ, ic.s9,
-            //          para->getParD(0)->neighborX, para->getParD(0)->neighborY, para->getParD(0)->neighborZ,
-            //          para->getParD(0)->size_Mat, para->getParD(0)->evenOrOdd);
-            //          getLastCudaError("Kernel execution failed");
-            //QDev27(para->getParD(0)->numberofthreads,   para->getParD(0)->nx, para->getParD(0)->ny,
-            //             para->getParD(0)->d0.f[0],  QinflowD.k, QinflowD.q27[0], kInflowQ, kInflowQ, ic.s9,
-            //             para->getParD(0)->neighborX, para->getParD(0)->neighborY, para->getParD(0)->neighborZ,
-            //             para->getParD(0)->size_Mat, para->getParD(0)->evenOrOdd);
-            //          getLastCudaError("Kernel execution failed");
-            //BBDev27(para->getParD(0)->numberofthreads,   para->getParD(0)->nx, para->getParD(0)->ny,
-            //             para->getParD(0)->d0.f[0],  QinflowD.k, QinflowD.q27[0], kInflowQ, kInflowQ, ic.s9,
-            //             para->getParD(0)->neighborX, para->getParD(0)->neighborY, para->getParD(0)->neighborZ,
-            //             para->getParD(0)->size_Mat, para->getParD(0)->evenOrOdd);
-            //          getLastCudaError("Kernel execution failed");
-           ////////////////////////////////////////////////////////////////////////////
-		   //Slip
-			//at the wall
-		   //QSlipDevComp27(	para->getParD(0)->numberofthreads, para->getParD(0)->d0SP.f[0],    para->getParD(0)->QWall.k,
-		   //					para->getParD(0)->QWall.q27[0],    para->getParD(0)->kQ,		   para->getParD(0)->omega,
-		   //					para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		   //					para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		   //getLastCudaError("QSlipDev27 execution failed");
-		 //  if (para->getParD(0)->kSlipQ > 0)
-			//{
-			//	QSlipDevComp27( para->getParD(0)->numberofthreads, para->getParD(0)->d0SP.f[0],    para->getParD(0)->QSlip.k,
-			//					para->getParD(0)->QSlip.q27[0],    para->getParD(0)->kSlipQ,       para->getParD(0)->omega,
-			//					para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//					para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			//	getLastCudaError("QSlipDev27 execution failed");
-			//	//QDevComp27(para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-			//	//			 para->getParD(0)->d0SP.f[0],             para->getParD(0)->QSlip.k,      para->getParD(0)->QSlip.q27[0],
-			//	//			 para->getParD(0)->QSlip.kQ,              para->getParD(0)->QSlip.kQ,     para->getParD(0)->omega,
-			//	//			 para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//	//			 para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-			//	//getLastCudaError("QDevComp27 (Geom) execution failed");
-		 //  }
-			//QSlipDev27( para->getParD(0)->numberofthreads, para->getParD(0)->d0SP.f[0],    para->getParD(0)->QSlip.k,
-			//			para->getParD(0)->QSlip.q27[0],    para->getParD(0)->kSlipQ,       para->getParD(0)->omega,
-			//			para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//			para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			//getLastCudaError("QSlipDev27 execution failed");
-			//QSlipDev27( para->getParD(0)->numberofthreads, para->getParD(0)->d0SP.f[0],    para->getParD(0)->QGeom.k,
-			//			para->getParD(0)->QGeom.q27[0],    para->getParD(0)->QGeom.kQ,       para->getParD(0)->omega,
-			//			para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//			para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			//getLastCudaError("QSlipDev27 execution failed");
-			//////////////////////////////////////////////////////////////////////////////
-			//output << "vor der WallBC\n";
-			////Test 2ndOrder
-            //BBDev27( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-            //         para->getParD(0)->d0SP.f[0],             QD.k, QD.q27[0], kQ, kQ,        para->getParD(0)->omega,
-            //         para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-            //         para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-            //getLastCudaError("QDev27 execution failed");
-			//////////////////////////////////////////////////////////////////////////
-			//Wall
-      //      BBDev27( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-      //               para->getParD(0)->d0SP.f[0],             para->getParD(0)->QWall.k,      para->getParD(0)->QWall.q27[0], 
-					 //para->getParD(0)->kQ,                    para->getParD(0)->kQ,           para->getParD(0)->omega,
-      //               para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-      //               para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-      //      getLastCudaError("QDev27 execution failed");
-			//QDev27( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-			//		para->getParD(0)->d0SP.f[0],             para->getParD(0)->QWall.k,		 para->getParD(0)->QWall.q27[0], 
-			//		para->getParD(0)->kQ,                    para->getParD(0)->kQ,           para->getParD(0)->omega,
-			//		para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//		para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-			//getLastCudaError("QDev27 execution failed");
-		   //if (para->getParD(0)->kQ > 0)
-		   //{
-			  // QDevComp27(para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-			  // 		      para->getParD(0)->d0SP.f[0],             para->getParD(0)->QWall.k,	   para->getParD(0)->QWall.q27[0], 
-			  // 		      para->getParD(0)->kQ,                    para->getParD(0)->kQ,           para->getParD(0)->omega,
-			  // 		      para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			  // 		      para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-			  // getLastCudaError("QDevComp27 (Wall) execution failed");
-		   //}
-			////////////////////////////////////////////////////////////////////////////
-			//Geom
-      //      BBDev27( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-      //               para->getParD(0)->d0SP.f[0],             para->getParD(0)->QGeom.k,      para->getParD(0)->QGeom.q27[0], 
-					 //para->getParD(0)->QGeom.kQ,              para->getParD(0)->QGeom.kQ,     para->getParD(0)->omega,
-      //               para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-      //               para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-      //      getLastCudaError("QDev27 execution failed");
-			//QDev27( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-			//		para->getParD(0)->d0SP.f[0],             para->getParD(0)->QGeom.k,		 para->getParD(0)->QGeom.q27[0], 
-			//		para->getParD(0)->QGeom.kQ,              para->getParD(0)->QGeom.kQ,     para->getParD(0)->omega,
-			//		para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//		para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-			//getLastCudaError("QDev27 execution failed");
-			//QDevComp27( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-			//			para->getParD(0)->d0SP.f[0],             para->getParD(0)->QGeom.k,		 para->getParD(0)->QGeom.q27[0], 
-			//			para->getParD(0)->QGeom.kQ,              para->getParD(0)->QGeom.kQ,     para->getParD(0)->omega,
-			//			para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//			para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-			//getLastCudaError("QDevComp27 (Geom) execution failed");
-
-
-		//QPressDevOld27( para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,  
-		//				para->getParD(0)->QPress.kN,       para->getParD(0)->QPress.kQ,    para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDev27 execution failed");
-
-		//QPressDevEQZ27( para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-		//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,  
-		//				para->getParD(0)->QPress.kN,       para->getParD(0)->QPress.kQ,    para->getParD(0)->omega,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDevEQZ27 execution failed");
-
-		//QPressDevZero27(para->getParD(0)->numberofthreads, para->getParD(0)->d0SP.f[0],       
-		//				para->getParD(0)->QPress.k,  	   para->getParD(0)->QPress.kQ,
-		//				para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		//getLastCudaError("QPressDev27 execution failed");
-
-		  //QDevComp27(para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-		  //			 para->getParD(0)->d0SP.f[0],             para->getParD(0)->QGeom.k,      para->getParD(0)->QGeom.q27[0], 
-		  //			 para->getParD(0)->QGeom.kQ,              para->getParD(0)->QGeom.kQ,     para->getParD(0)->omega,
-		  //			 para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		  //			 para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-		  //getLastCudaError("QDevComp27 (Geom) execution failed");
-
-
-			//////////////////////////////////////////////////////////////////////////////////
-			////print forces to file
-			//////printForcing(para);
-			////if(para->getTOut()>0 && t%para->getTOut()==0 && t>para->getStartTurn())              printForcing(para);
-			//////////////////////////////////////////////////////////////////////////////////
-			////get velocities at slip bc to set the forcing 
-			//GetVelotoForce27(para->getParD(0)->numberofthreads, para->getParD(0)->d0SP.f[0],    para->getParD(0)->QSlip.k, 
-			//				 para->getParD(0)->kSlipQ,          
-			//				 para->getParD(0)->VxForce,         para->getParD(0)->VyForce,      para->getParD(0)->VzForce,
-			//	             para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//	             para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			//////////////////////////////////////////////////////////////////////////////////
-			////calculate the new forcing
-			//calcVeloForce(para);
-			//////////////////////////////////////////////////////////////////////////////////
-
-          ////////////////////////////////////////////////////////////////////////////////
-          if (para->getParD(0)->evenOrOdd==true)  para->getParD(0)->evenOrOdd=false;
-          else                                    para->getParD(0)->evenOrOdd=true;
-
-          ////////////////////////////////////////////////////////////////////////////////
-
-		if (para->getUseWale())
-		{
-		    CalcMacCompSP27(para->getParD(0)->vx_SP,       
-						    para->getParD(0)->vy_SP,        
-						    para->getParD(0)->vz_SP,        
-						    para->getParD(0)->rho_SP, 
-						    para->getParD(0)->press_SP, 
-						    para->getParD(0)->geoSP,       
-						    para->getParD(0)->neighborX_SP, 
-						    para->getParD(0)->neighborY_SP, 
-						    para->getParD(0)->neighborZ_SP,
-						    para->getParD(0)->size_Mat_SP,
-						    para->getParD(0)->numberofthreads,       
-						    para->getParD(0)->d0SP.f[0],    
-						    para->getParD(0)->evenOrOdd);
-            getLastCudaError("CalcMacSP27 execution failed"); 
 
-		} 
 
 
 
-		  //////////////////////////////////////////////////////////////////////////////////
-		  ////calculate the new forcing
-		  //if (((t%10) == 0) && (t >= 10)/*((t%para->getTStartOut()) == 0) && (t >= para->getTStartOut())*/)
-		  //{
-			 // forceCalculator->calcPIDControllerForForce(para);
-			 // forceCalculator->printForcing(para);
-		  //}
-		  //////////////////////////////////////////////////////////////////////////////////
-		  
-		  // ////////////////////////////////////////////////////////////////////////
-		 // if (para->getDiffOn()==true)
-		 // {
-			//  if (para->getDiffMod() == 7)
-			//  {
-			//	  //?????????????????
-			//  }
-			//  else if (para->getDiffMod() == 27)
-			//  {
-			//		QPressNoRhoDev27(   para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-			//							para->getParD(0)->d27.f[0],        para->getParD(0)->QPress.k,  
-			//							para->getParD(0)->QPress.kN,       para->getParD(0)->QPress.kQ,    para->getParD(0)->omega,
-			//							para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//							para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			//		getLastCudaError("QPressDev27 execution failed");
-			//  }
-		 // }
-		 // ////////////////////////////////////////////////////////////////////////
-
-
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 ////press EQ comp
-		 //if (para->getParD(0)->QPress.kQ > 0)
-		 //{
-			// // //////////////////////////////////////////////////////////////////////////////////
-			 QPressNoRhoDev27(  para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-			 					para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,  
-			 					para->getParD(0)->QPress.kN,       para->getParD(0)->QPress.kQ,    para->getParD(0)->omega,
-			 					para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			 					para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			 getLastCudaError("QPressNoRhoDev27 execution failed");
-			// //QPressDevEQZ27(para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-		 //	//				para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,  
-			//	//			para->getParD(0)->QPress.kN,       para->getParD(0)->kDistTestRE.f[0],       
-			//	//			para->getParD(0)->QPress.kQ,       para->getParD(0)->omega,
-			//	//			para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		 //	//				para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			// //getLastCudaError("QPressDevEQZ27 execution failed");
-
- 		////	QInflowScaleByPressDev27(   para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-			////							para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,  
-			////							para->getParD(0)->QPress.kN,       para->getParD(0)->QPress.kQ,    para->getParD(0)->omega,
-			////							para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			////							para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			////getLastCudaError("QInflowScaleByPressDev27 execution failed");
-
-		 //}
-		 //////////////////////////////////////////////////////////////////////////////////
-		 ////only for a round off error test
-		 //para->cudaCopyTestREtoHost(0,para->getParH(0)->QPress.kQ);
-		 //printRE(para, t);
-		 //////////////////////////////////////////////////////////////////////////////////
-
-		  //////////////////////////////////////////////////////////////////////////////////
-			//QPressNoRhoDev27(   para->getParD(0)->numberofthreads, para->getParD(0)->Qoutflow.RhoBC, 
-			//					para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qoutflow.k,  
-			//					para->getParD(0)->Qoutflow.kN,     para->getParD(0)->Qoutflow.kQ,    para->getParD(0)->omega,
-			//					para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-			//					para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-			//getLastCudaError("QPressNoRhoDev27 execution failed");
-		  //////////////////////////////////////////////////////////////////////////////////
-		  ////press NEQ incomp
-		  //QPressDevIncompNEQ27(para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-		  //					   para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,  
-		  //					   para->getParD(0)->QPress.kN,       para->getParD(0)->QPress.kQ,    para->getParD(0)->omega,
-		  //					   para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		  //					   para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		  //getLastCudaError("QPressDevIncompNEQ27 execution failed");
-		  //////////////////////////////////////////////////////////////////////////////////
-		  //press NEQ comp
-		  //QPressDevNEQ27( para->getParD(0)->numberofthreads, para->getParD(0)->QPress.RhoBC, 
-		  //				  para->getParD(0)->d0SP.f[0],       para->getParD(0)->QPress.k,  
-		  //				  para->getParD(0)->QPress.kN,       para->getParD(0)->QPress.kQ,    para->getParD(0)->omega,
-		  //				  para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		  //				  para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		  //getLastCudaError("QPressDevNEQ27 execution failed");
-		  ////////////////////////////////////////////////////////////////////////////////
-          //if (  myid == numprocs - 1)  
-          //   PressSchlaffer27( para->getParD(0)->numberofthreads,  para->getParD(0)->Qoutflow.RhoBC,
-          //                     para->getParD(0)->d0SP.f[0],        para->getParD(0)->Qoutflow.Vx, 
-							   //para->getParD(0)->Qoutflow.Vy,      para->getParD(0)->Qoutflow.Vz, 
-							   //para->getParD(0)->Qoutflow.deltaVz, para->getParD(0)->Qoutflow.k,  
-							   //para->getParD(0)->Qoutflow.kN,      para->getParD(0)->kOutflowQ,                      
-							   //para->getParD(0)->omega,            para->getParD(0)->neighborX_SP,    
-							   //para->getParD(0)->neighborY_SP,     para->getParD(0)->neighborZ_SP,
-          //                     para->getParD(0)->size_Mat_SP,      para->getParD(0)->evenOrOdd);
-          //getLastCudaError("PressSchlaffer27 execution failed");
-          ////////////////////////////////////////////////////////////////////////////////
-          //if (  myid == 0)  
-       //      VelSchlaffer27(para->getParD(0)->numberofthreads, t,
-       //                     para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.Vz, 
-							//para->getParD(0)->Qinflow.deltaVz, para->getParD(0)->Qinflow.k,  
-							//para->getParD(0)->Qinflow.kN,      para->getParD(0)->kInflowQ, 
-							//para->getParD(0)->omega,           para->getParD(0)->neighborX_SP, 
-							//para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-       //                     para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-       //   getLastCudaError("VelSchlaffer27 execution failed");
-		  ////////////////////////////////////////////////////////////////////////////////
-		  ////High noon incomp
-		  //QVelDevIncompHighNu27(para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-				//			    para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,   para->getParD(0)->Qinflow.Vz,
-				//			    para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-				//			    para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,
-				//			    para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-				//			    para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		  //getLastCudaError("QVelDevComp27 execution failed");
-
-		  //QDevIncompHighNu27( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-				//			  para->getParD(0)->d0SP.f[0],             para->getParD(0)->QGeom.k,      para->getParD(0)->QGeom.q27[0], 
-				//			  para->getParD(0)->QGeom.kQ,              para->getParD(0)->QGeom.kQ,     para->getParD(0)->omega,
-				//			  para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-				//			  para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-		  //getLastCudaError("QDevComp27 (Geom) execution failed");
-		  //////////////////////////////////////////////////////////////////////////////////
-		  ////High noon comp
-		  //QVelDevCompHighNu27(para->getParD(0)->numberofthreads, para->getParD(0)->nx,           para->getParD(0)->ny,
-				//			  para->getParD(0)->Qinflow.Vx,      para->getParD(0)->Qinflow.Vy,   para->getParD(0)->Qinflow.Vz,
-				//			  para->getParD(0)->d0SP.f[0],       para->getParD(0)->Qinflow.k,    para->getParD(0)->Qinflow.q27[0], 
-				//			  para->getParD(0)->kInflowQ,        para->getParD(0)->kInflowQ,     para->getParD(0)->omega,
-				//			  para->getParD(0)->neighborX_SP,    para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-				//			  para->getParD(0)->size_Mat_SP,     para->getParD(0)->evenOrOdd);
-		  //getLastCudaError("QVelDevComp27 execution failed");
-
-		  //QDevCompHighNu27( para->getParD(0)->numberofthreads,       para->getParD(0)->nx,           para->getParD(0)->ny,
-		  //					para->getParD(0)->d0SP.f[0],             para->getParD(0)->QGeom.k,      para->getParD(0)->QGeom.q27[0], 
-		  //					para->getParD(0)->QGeom.kQ,              para->getParD(0)->QGeom.kQ,     para->getParD(0)->omega,
-		  //					para->getParD(0)->neighborX_SP,          para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-		  //					para->getParD(0)->size_Mat_SP,           para->getParD(0)->evenOrOdd);
-		  //getLastCudaError("QDevComp27 (Geom) execution failed");
-		  //////////////////////////////////////////////////////////////////////////////////
-
-         if (para->getMaxLevel()>=1)
-         {
-            //////////////////////////////////////////////////////////////////////////
-            // Scaling CF and FC
-            //////////////////////////////////////////////////////////////////////////
-            //ScaleCF27(  para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-            //            para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP,
-            //            para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP, para->getParD(1)->neighborZ_SP,
-            //            para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,  para->getParD(0)->evenOrOdd,
-            //            para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-            //            para->getParD(0)->K_CF,           para->getParD(0)->omega,        para->getParD(1)->omega, 
-            //            para->getParD(0)->vis,            para->getParD(0)->nx,           para->getParD(0)->ny, 
-            //            para->getParD(1)->nx,             para->getParD(1)->ny,           para->getParD(0)->gridNX);
-            //getLastCudaError("ScaleCF27 execution failed");
-
-            //ScaleFC27(  para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-            //            para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP, 
-            //            para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP, para->getParD(1)->neighborZ_SP, 
-            //            para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,  para->getParD(0)->evenOrOdd,
-            //            para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-            //            para->getParD(0)->K_FC,           para->getParD(0)->omega,        para->getParD(1)->omega, 
-            //            para->getParD(0)->vis,            para->getParD(0)->nx,           para->getParD(0)->ny, 
-            //            para->getParD(1)->nx,             para->getParD(1)->ny,           para->getParD(0)->gridNX);
-            //getLastCudaError("ScaleFC27 execution failed");
-            //////////////////////////////////////////////////////////////////////////
-            //ScaleCFEff27(  para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-            //               para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-            //               para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-            //               para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-            //               para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-            //               para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-            //               para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-            //               para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-            //               para->getParD(0)->offCF);
-            //getLastCudaError("ScaleCF27 execution failed");
-
-            //ScaleFCEff27(  para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-            //               para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-            //               para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-            //               para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-            //               para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-            //               para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-            //               para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-            //               para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-            //               para->getParD(0)->offFC);
-            //getLastCudaError("ScaleFC27 execution failed");
-            //////////////////////////////////////////////////////////////////////////
-            //ScaleCFLast27( para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-            //               para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-            //               para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-            //               para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-            //               para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-            //               para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-            //               para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-            //               para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-            //               para->getParD(0)->offCF);
-            //getLastCudaError("ScaleCF27 execution failed");
-
-            //ScaleFCLast27( para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-            //               para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-            //               para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-            //               para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-            //               para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-            //               para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-            //               para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-            //               para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-            //               para->getParD(0)->offFC);
-            //getLastCudaError("ScaleFC27 execution failed");
-            //////////////////////////////////////////////////////////////////////////
-            //ScaleCFpress27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-            //               para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-            //               para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-            //               para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-            //               para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-            //               para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-            //               para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-            //               para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-            //               para->getParD(0)->offCF);
-            //getLastCudaError("ScaleCF27 execution failed");
-
-            //ScaleFCpress27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-            //               para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-            //               para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-            //               para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-            //               para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-            //               para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-            //               para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-            //               para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-            //               para->getParD(0)->offFC);
-            //getLastCudaError("ScaleFC27 execution failed");
+        ////////////////////////////////////////////////////////////////////////////////
+        //Calc Median
+        ////////////////////////////////////////////////////////////////////////////////
+        if (para->getCalcMedian() && ((int)t >= para->getTimeCalcMedStart()) && ((int)t <= para->getTimeCalcMedEnd()))
+        {
+          for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
+          {
+        	  //CalcMedSP27(para->getParD(lev)->vx_SP_Med,       
+        			//	  para->getParD(lev)->vy_SP_Med,        
+        			//	  para->getParD(lev)->vz_SP_Med,        
+        			//	  para->getParD(lev)->rho_SP_Med, 
+        			//	  para->getParD(lev)->press_SP_Med, 
+        			//	  para->getParD(lev)->geoSP,       
+        			//	  para->getParD(lev)->neighborX_SP, 
+        			//	  para->getParD(lev)->neighborY_SP, 
+        			//	  para->getParD(lev)->neighborZ_SP,
+        			//	  para->getParD(lev)->size_Mat_SP, 
+        			//	  para->getParD(lev)->numberofthreads,       
+        			//	  para->getParD(lev)->d0SP.f[0],    
+        			//	  para->getParD(lev)->evenOrOdd);
+        	  //getLastCudaError("CalcMacSP27 execution failed"); 
+        
+        	  CalcMedCompSP27(para->getParD(lev)->vx_SP_Med,       
+        					  para->getParD(lev)->vy_SP_Med,        
+        					  para->getParD(lev)->vz_SP_Med,        
+        					  para->getParD(lev)->rho_SP_Med, 
+        					  para->getParD(lev)->press_SP_Med, 
+        					  para->getParD(lev)->geoSP,       
+        					  para->getParD(lev)->neighborX_SP, 
+        					  para->getParD(lev)->neighborY_SP, 
+        					  para->getParD(lev)->neighborZ_SP,
+        					  para->getParD(lev)->size_Mat_SP, 
+        					  para->getParD(lev)->numberofthreads,       
+        					  para->getParD(lev)->d0SP.f[0],    
+        					  para->getParD(lev)->evenOrOdd);
+        	  getLastCudaError("CalcMacMedCompSP27 execution failed"); 
+        
+          }
+        }
+        ////////////////////////////////////////////////////////////////////////////////
 
 
-            //////////////////////////////////////////////////////////////////////////
-			//fine to coarse interpolation
-			 //ScaleFC_comp_D3Q27F3(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],       para->getParD(0)->g6.g[0],
-				//			      para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-				//			      para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-				//			      para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-				//			      para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-				//			      para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-				//			      para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-				//			      para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-				//			      para->getParD(0)->offFC);
-    //        getLastCudaError("ScaleFC_comp_D3Q27F3 execution failed");
-            ////////////////////////////////////////////////////////////////////////////
-            //ScaleFC_0817_comp_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-							     //para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-							     //para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-							     //para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-							     //para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-							     //para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-							     //para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-							     //para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-							     //para->getParD(0)->offFC);
-            //getLastCudaError("ScaleFC_0817_comp_27 execution failed");
-            ////////////////////////////////////////////////////////////////////////////
-           // ScaleFC_Fix_comp_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-							    //para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-							    //para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-							    //para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-							    //para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-							    //para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-							    //para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-							    //para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-							    //para->getParD(0)->offFC);
-           // getLastCudaError("ScaleFC_Fix_comp_27 execution failed");
-            ////////////////////////////////////////////////////////////////////////////
-
-            ScaleFC_RhoSq_comp_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-							      para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-							      para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-							      para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-							      para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-							      para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-							      para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-							      para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-							      para->getParD(0)->offFC);
-            getLastCudaError("ScaleFC_RhoSq_comp_27 execution failed");
-
-		    //////////////////////////////////////////////////////////////////////////
-           // ScaleFC_RhoSq_3rdMom_comp_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-										 //para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-										 //para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-										 //para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-										 //para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-										 //para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-										 //para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-										 //para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-										 //para->getParD(0)->offFC);
-           // getLastCudaError("ScaleFC_RhoSq_3rdMom_comp_27 execution failed");
-			//////////////////////////////////////////////////////////////////////////
-         //   ScaleFC_AA2016_comp_27( para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-									//para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-									//para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-									//para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-									//para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-									//para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-									//para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-									//para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-									//para->getParD(0)->offFC);
-         //   getLastCudaError("ScaleFC_AA2016_comp_27 execution failed");
-			//////////////////////////////////////////////////////////////////////////
-			//data exchange
-			 if (para->getNumprocs() > 1)
-			 {
-				 ////1D domain decomposition
-				 //exchangePreCollDataGPU27(para, comm, 0);
-				 //3D domain decomposition
-				 //output << "start exchange Pre X (level 0) \n";
-				 exchangePreCollDataXGPU27(para.get(), comm, cudaManager.get(), 0);
-				 //output << "end exchange Pre X (level 0) \n";
-				 //output << "start exchange Pre Y (level 0) \n";
-				 exchangePreCollDataYGPU27(para.get(), comm, cudaManager.get(), 0);
-				 //output << "end exchange Pre Y (level 0) \n";
-				 //output << "start exchange Pre Z (level 0) \n";
-				 exchangePreCollDataZGPU27(para.get(), comm, cudaManager.get(), 0);
-				 //output << "end exchange Pre Z (level 0) \n";
-				 //////////////////////////////////////////////////////////////////////////
-				 //3D domain decomposition convection diffusion
-				 if (para->getDiffOn()==true)
-				 {
-					 exchangePreCollDataADXGPU27(para.get(), comm, cudaManager.get(), 0);
-					 exchangePreCollDataADYGPU27(para.get(), comm, cudaManager.get(), 0);
-					 exchangePreCollDataADZGPU27(para.get(), comm, cudaManager.get(), 0);
-				 }
-				 if (para->getIsF3())
-				 {
-					 exchangeCollDataF3XGPU(para.get(), comm, cudaManager.get(), 0);
-					 exchangeCollDataF3YGPU(para.get(), comm, cudaManager.get(), 0);
-					 exchangeCollDataF3ZGPU(para.get(), comm, cudaManager.get(), 0);
-				 }
-			 }
-		    //////////////////////////////////////////////////////////////////////////
-		    //coarse to fine interpolation
-			 //ScaleCF_comp_D3Q27F3(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],       para->getParD(1)->g6.g[0],
-				//			      para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-				//			      para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-				//			      para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-				//			      para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-				//			      para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-				//			      para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-				//			      para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-				//			      para->getParD(0)->offCF);
-    //        getLastCudaError("ScaleCF_comp_D3Q27F3 execution failed");
-		    ////////////////////////////////////////////////////////////////////////
-            //ScaleCF_0817_comp_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-							     //para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-							     //para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-							     //para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-							     //para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-							     //para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-							     //para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-							     //para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-							     //para->getParD(0)->offCF);
-            //getLastCudaError("ScaleCF_0817_comp_27 execution failed");
-		    ////////////////////////////////////////////////////////////////////////
-           // ScaleCF_Fix_comp_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-							    //para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-							    //para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-							    //para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-							    //para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-							    //para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-							    //para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-							    //para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-							    //para->getParD(0)->offCF);
-           // getLastCudaError("ScaleCF_Fix_comp_27 execution failed");
-		    ////////////////////////////////////////////////////////////////////////
-			ScaleCF_RhoSq_comp_27(para->getParD(0)->d0SP.f[0], para->getParD(1)->d0SP.f[0],
-							      para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-							      para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-							      para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-							      para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-							      para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-							      para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-							      para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-							      para->getParD(0)->offCF);
-            getLastCudaError("ScaleCF_RhoSq_comp_27 execution failed");
-			//////////////////////////////////////////////////////////////////////////
-           // ScaleCF_RhoSq_3rdMom_comp_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-										 //para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-										 //para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-										 //para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-										 //para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-										 //para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-										 //para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-										 //para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-										 //para->getParD(0)->offCF);
-           // getLastCudaError("ScaleCF_RhoSq_3rdMom_comp_27 execution failed");
-            //////////////////////////////////////////////////////////////////////////
-         //   ScaleCF_AA2016_comp_27( para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-									//para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-									//para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-									//para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-									//para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-									//para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-									//para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-									//para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-									//para->getParD(0)->offCF);
-         //   getLastCudaError("ScaleCF_AA2016_comp_27 execution failed");
-            //////////////////////////////////////////////////////////////////////////
 
 
+        ////////////////////////////////////////////////////////////////////////////////
+        // CheckPoint
+        ////////////////////////////////////////////////////////////////////////////////
+        if(para->getDoCheckPoint() && para->getTimeDoCheckPoint()>0 && t%para->getTimeDoCheckPoint()==0 && t>0 && !para->overWritingRestart(t))
+        {
             //////////////////////////////////////////////////////////////////////////
-
-            //ScaleCF_Fix_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-            //               para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-            //               para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-            //               para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-            //               para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-            //               para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-            //               para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-            //               para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-            //               para->getParD(0)->offCF);
-            //getLastCudaError("ScaleCF27 execution failed");
-
-            //ScaleFC_Fix_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-            //               para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-            //               para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-            //               para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-            //               para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-            //               para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-            //               para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-            //               para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-            //               para->getParD(0)->offFC);
-            //getLastCudaError("ScaleFC27 execution failed");
+            //Timer SDK
+            sdkStopTimer(&sdkTimer);
+            sdkResetTimer(&sdkTimer);
             //////////////////////////////////////////////////////////////////////////
-          //  ScaleCF_NSPress_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-							   //para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-							   //para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-							   //para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-							   //para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-							   //para->getParD(0)->K_CF,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-							   //para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-							   //para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-							   //para->getParD(0)->offCF);
-          //  getLastCudaError("ScaleCF27 execution failed");
-
-          //  ScaleFC_NSPress_27(para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0], 
-							   //para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-							   //para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-							   //para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-							   //para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-							   //para->getParD(0)->K_FC,           para->getParD(0)->omega,           para->getParD(1)->omega, 
-							   //para->getParD(0)->vis,            para->getParD(0)->nx,              para->getParD(0)->ny, 
-							   //para->getParD(1)->nx,             para->getParD(1)->ny,              para->getParD(0)->numberofthreads,
-							   //para->getParD(0)->offFC);
-          //  getLastCudaError("ScaleFC27 execution failed");
-            ////////////////////////////////////////////////////////////////////////
-            if (para->getDiffOn()==true)
+            //Timer Event
+            checkCudaErrors( cudaEventRecord(stop_t));
+            checkCudaErrors( cudaEventSynchronize(stop_t));
+            
+            if( para->getDoCheckPoint() )
             {
-               if (para->getDiffMod() == 7)
-               {
-                  //ScaleCFThS7(   para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-                  //               para->getParD(0)->d7.f[0],        para->getParD(1)->d7.f[0],                
-                  //               para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-                  //               para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-                  //               para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-                  //               para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-                  //               para->getParD(0)->K_CF,           
-                  //               para->getParD(0)->vis,            para->getParD(1)->diffusivity,     para->getParD(0)->numberofthreads);
-                  //getLastCudaError("ScaleCFTh7 execution failed");
-
-                  //ScaleFCThS7(   para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],
-                  //               para->getParD(0)->d7.f[0],        para->getParD(1)->d7.f[0],
-                  //               para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-                  //               para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-                  //               para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-                  //               para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-                  //               para->getParD(0)->K_FC,
-                  //               para->getParD(0)->vis,            para->getParD(0)->diffusivity,     para->getParD(0)->numberofthreads);
-                  //getLastCudaError("ScaleFCTh7 execution failed");
-                  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                  ScaleCFThSMG7( para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-                                 para->getParD(0)->d7.f[0],        para->getParD(1)->d7.f[0],                
-                                 para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-                                 para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-                                 para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-                                 para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-                                 para->getParD(0)->K_CF,           
-                                 para->getParD(0)->vis,            para->getParD(1)->diffusivity,     para->getParD(0)->numberofthreads,
-                                 para->getParD(0)->offCF);
-                  getLastCudaError("ScaleCFTh7 execution failed");
-
-                  ScaleFCThSMG7( para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],
-                                 para->getParD(0)->d7.f[0],        para->getParD(1)->d7.f[0],
-                                 para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-                                 para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-                                 para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-                                 para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-                                 para->getParD(0)->K_FC,
-                                 para->getParD(0)->vis,            para->getParD(0)->diffusivity,     para->getParD(0)->numberofthreads,
-                                 para->getParD(0)->offFC);
-                  getLastCudaError("ScaleFCTh7 execution failed");
-               } 
-               else if (para->getDiffMod() == 27)
-               {
-                  ScaleCFThS27(  para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],                
-                                 para->getParD(0)->d27.f[0],       para->getParD(1)->d27.f[0],                
-                                 para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP,
-                                 para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP,
-                                 para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-                                 para->getParD(0)->intCF.ICellCFC, para->getParD(0)->intCF.ICellCFF, 
-                                 para->getParD(0)->K_CF,           
-								 para->getParD(0)->vis,            para->getParD(1)->diffusivity,     para->getParD(0)->numberofthreads,
-								 para->getParD(0)->offCF);
-                  getLastCudaError("ScaleCFTh27 execution failed");
-
-                  ScaleFCThS27(  para->getParD(0)->d0SP.f[0],      para->getParD(1)->d0SP.f[0],
-                                 para->getParD(0)->d27.f[0],       para->getParD(1)->d27.f[0],
-                                 para->getParD(0)->neighborX_SP,   para->getParD(0)->neighborY_SP,    para->getParD(0)->neighborZ_SP, 
-                                 para->getParD(1)->neighborX_SP,   para->getParD(1)->neighborY_SP,    para->getParD(1)->neighborZ_SP, 
-                                 para->getParD(0)->size_Mat_SP,    para->getParD(1)->size_Mat_SP,     para->getParD(0)->evenOrOdd,
-                                 para->getParD(0)->intFC.ICellFCC, para->getParD(0)->intFC.ICellFCF, 
-                                 para->getParD(0)->K_FC,
-								 para->getParD(0)->vis,            para->getParD(0)->diffusivity,     para->getParD(0)->numberofthreads,
-								 para->getParD(0)->offFC);
-                  getLastCudaError("ScaleFCTh27 execution failed");
-               }
-            } 
+                output << "Dateien fuer CheckPoint kopieren t=" << t << "...\n";
+                
+                for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
+                {
+                    cudaManager->cudaCopyFsForCheckPoint(lev);
+                }
+                
+                output << "Dateien fuer CheckPoint schreiben t=" << t << "...";
+                restObj->safe(para.get());
+                rest->doCheckPoint(para->getFName(), t, para->getMyID());
+                output << "\n fertig\n";
+            }
             //////////////////////////////////////////////////////////////////////////
-         }
-		 //output << "fertig \n";
-      //}
-      //+++++MPI++++++
-      //if(numprocs>1){
-      //   exchangeData();
-      //}
-	  //output << "vor CalcMed\n";
-	  ////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-	  ////////////////////////////////////////////////////////////////////////////////
-	  //Particles
-	  ////////////////////////////////////////////////////////////////////////////////
-	  if (para->getCalcParticle()) propagateParticles(para.get(), t);
-	  ////////////////////////////////////////////////////////////////////////////////
-
-
-	  if (para->getNumprocs() > 1)
-	  {
-	  	  ////1D domain decomposition
-	  	  //exchangePostCollDataGPU27(para, comm, 0);
-	  	  //////////////////////////////////////////////////////////////////////////
-	  	  //3D domain decomposition
-	  	  //output << "start exchange Post X (level 0) \n";
-	  	  exchangePostCollDataXGPU27(para.get(), comm, cudaManager.get(), 0);
-	  	  //output << "end exchange Post X (level 0) \n";
-	  	  //output << "start exchange Post Y (level 0) \n";
-	  	  exchangePostCollDataYGPU27(para.get(), comm, cudaManager.get(), 0);
-	  	  //output << "end exchange Post Y (level 0) \n";
-	  	  //output << "start exchange Post Z (level 0) \n";
-	  	  exchangePostCollDataZGPU27(para.get(), comm, cudaManager.get(), 0);
-	  	  //output << "end exchange Post Z (level 0) \n";
-	  	  ////////////////////////////////////////////////////////////////////////
-	  	  //3D domain decomposition convection diffusion
-	  	  if (para->getDiffOn()==true)
-	  	  {
-	  	  	  exchangePostCollDataADXGPU27(para.get(), comm, cudaManager.get(), 0);
-	  	  	  exchangePostCollDataADYGPU27(para.get(), comm, cudaManager.get(), 0);
-	  	  	  exchangePostCollDataADZGPU27(para.get(), comm, cudaManager.get(), 0);
-	  	  }
-		  if (para->getIsF3())
-		  {
-			  exchangeCollDataF3XGPU(para.get(), comm, cudaManager.get(), 0);
-			  exchangeCollDataF3YGPU(para.get(), comm, cudaManager.get(), 0);
-			  exchangeCollDataF3ZGPU(para.get(), comm, cudaManager.get(), 0);
-		  }
-	  }
-
-
-
-
-      //////////////////////////////////////////////////////////////////////////
-      // run Analyzers for kinetic energy and enstrophy for TGV in 3D
-	  ////////////////////////////////////////////////////////////////////////////////
-	  if( this->kineticEnergyAnalyzer ) this->kineticEnergyAnalyzer->run(t);
-	  if( this->enstrophyAnalyzer     ) this->enstrophyAnalyzer->run(t);
-	  ////////////////////////////////////////////////////////////////////////////////
+            //Timer SDK
+            sdkStartTimer(&sdkTimer);
+            //////////////////////////////////////////////////////////////////////////
+            //Timer Event
+            checkCudaErrors( cudaEventRecord(start_t));
+        }
+        //////////////////////////////////////////////////////////////////////////////
 
 
 
 
-	  ////////////////////////////////////////////////////////////////////////////////
-	  //Calc Median
-	  ////////////////////////////////////////////////////////////////////////////////
-	  if (para->getCalcMedian() && ((int)t >= para->getTimeCalcMedStart()) && ((int)t <= para->getTimeCalcMedEnd()))
-	  {
-		  for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
-		  {
-			  //CalcMedSP27(para->getParD(lev)->vx_SP_Med,       
-					//	  para->getParD(lev)->vy_SP_Med,        
-					//	  para->getParD(lev)->vz_SP_Med,        
-					//	  para->getParD(lev)->rho_SP_Med, 
-					//	  para->getParD(lev)->press_SP_Med, 
-					//	  para->getParD(lev)->geoSP,       
-					//	  para->getParD(lev)->neighborX_SP, 
-					//	  para->getParD(lev)->neighborY_SP, 
-					//	  para->getParD(lev)->neighborZ_SP,
-					//	  para->getParD(lev)->size_Mat_SP, 
-					//	  para->getParD(lev)->numberofthreads,       
-					//	  para->getParD(lev)->d0SP.f[0],    
-					//	  para->getParD(lev)->evenOrOdd);
-			  //getLastCudaError("CalcMacSP27 execution failed"); 
-
-  			  CalcMedCompSP27(para->getParD(lev)->vx_SP_Med,       
-							  para->getParD(lev)->vy_SP_Med,        
-							  para->getParD(lev)->vz_SP_Med,        
-							  para->getParD(lev)->rho_SP_Med, 
-							  para->getParD(lev)->press_SP_Med, 
-							  para->getParD(lev)->geoSP,       
-							  para->getParD(lev)->neighborX_SP, 
-							  para->getParD(lev)->neighborY_SP, 
-							  para->getParD(lev)->neighborZ_SP,
-							  para->getParD(lev)->size_Mat_SP, 
-							  para->getParD(lev)->numberofthreads,       
-							  para->getParD(lev)->d0SP.f[0],    
-							  para->getParD(lev)->evenOrOdd);
-			  getLastCudaError("CalcMacMedCompSP27 execution failed"); 
-
-		  }
-	  }
-	  ////////////////////////////////////////////////////////////////////////////////
-
-
-
-	  ////////////////////////////////////////////////////////////////////////////////
-      // CheckPoint
-      ////////////////////////////////////////////////////////////////////////////////
-      if(para->getDoCheckPoint() && para->getTimeDoCheckPoint()>0 && t%para->getTimeDoCheckPoint()==0 && t>0 && !para->overWritingRestart(t))
-      {
-		  //////////////////////////////////////////////////////////////////////////
-		  //Timer SDK
-		  sdkStopTimer(&sdkTimer);
-		  sdkResetTimer(&sdkTimer);
-		  //////////////////////////////////////////////////////////////////////////
-		  //Timer Event
-		  checkCudaErrors( cudaEventRecord(stop_t));
-		  checkCudaErrors( cudaEventSynchronize(stop_t));
-
-		  if( para->getDoCheckPoint() )
-		  {
-			  output << "Dateien fuer CheckPoint kopieren t=" << t << "...\n";
-
-			  for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
-			  {
-				  cudaManager->cudaCopyFsForCheckPoint(lev);
-			  }
-
-			  output << "Dateien fuer CheckPoint schreiben t=" << t << "...";
-			  restObj->safe(para.get());
-			  rest->doCheckPoint(para->getFName(), t, para->getMyID());
-			  output << "\n fertig\n";
-		  }
-		  //////////////////////////////////////////////////////////////////////////
-		  //Timer SDK
-		  sdkStartTimer(&sdkTimer);
-		  //////////////////////////////////////////////////////////////////////////
-		  //Timer Event
-		  checkCudaErrors( cudaEventRecord(start_t));
-      }
-      //////////////////////////////////////////////////////////////////////////////
 
+        ////////////////////////////////////////////////////////////////////////////////
+        //Measure Points
+        ////////////////////////////////////////////////////////////////////////////////
+        //set MP-Time
+        if (para->getUseMeasurePoints())
+        {
+            if ((t%para->getTimestepForMP()) == 0)
+            {
+                unsigned int valuesPerClockCycle = (unsigned int)(para->getclockCycleForMP() / para->getTimestepForMP());
+                for (int lev = para->getCoarse(); lev <= para->getFine(); lev++)
+                {
+                    //output << "start level = " << lev << "\n";
+                    LBCalcMeasurePoints27(  para->getParD(lev)->VxMP,			para->getParD(lev)->VyMP,			para->getParD(lev)->VzMP,
+                    				        para->getParD(lev)->RhoMP,		    para->getParD(lev)->kMP,			para->getParD(lev)->numberOfPointskMP,
+                    				        valuesPerClockCycle,				t_MP,								para->getParD(lev)->geoSP,
+                    				        para->getParD(lev)->neighborX_SP,   para->getParD(lev)->neighborY_SP,	para->getParD(lev)->neighborZ_SP,
+                    				        para->getParD(lev)->size_Mat_SP,	para->getParD(lev)->d0SP.f[0],		para->getParD(lev)->numberofthreads,
+                    				        para->getParD(lev)->evenOrOdd);
+                }
+                t_MP++;
+            }
+            
+            //Copy Measure Values
+            if ((t % (unsigned int)para->getclockCycleForMP()) == 0)
+            {
+                for (int lev = para->getCoarse(); lev <= para->getFine(); lev++)
+                {
+                    cudaManager->cudaCopyMeasurePointsToHost(lev);
+                    para->copyMeasurePointsArrayToVector(lev);
+                    output << "\n Write MeasurePoints at level = " << lev << " and timestep = " << t << "\n";
+                    for (int j = 0; j < (int)para->getParH(lev)->MP.size(); j++)
+                    {
+                        MeasurePointWriter::writeMeasurePoints(para.get(), lev, j, t);
+                    }
+                    MeasurePointWriter::calcAndWriteMeanAndFluctuations(para.get(), lev, t, para->getTStartOut());
+                }
+                t_MP = 0;
+            }
+        }
+        //////////////////////////////////////////////////////////////////////////////////
 
 
 
 
-      ////////////////////////////////////////////////////////////////////////////////
-      //Measure Points
-      ////////////////////////////////////////////////////////////////////////////////
-      //set MP-Time
-	  if (para->getUseMeasurePoints())
-	  {
-		  if ((t%para->getTimestepForMP()) == 0)
-		  {
-			  unsigned int valuesPerClockCycle = (unsigned int)(para->getclockCycleForMP() / para->getTimestepForMP());
-			  for (int lev = para->getCoarse(); lev <= para->getFine(); lev++)
-			  {
-				  //output << "start level = " << lev << "\n";
-				  LBCalcMeasurePoints27(  para->getParD(lev)->VxMP,			para->getParD(lev)->VyMP,			para->getParD(lev)->VzMP,
-										  para->getParD(lev)->RhoMP,		para->getParD(lev)->kMP,			para->getParD(lev)->numberOfPointskMP,
-										  valuesPerClockCycle,				t_MP,								para->getParD(lev)->geoSP,
-										  para->getParD(lev)->neighborX_SP, para->getParD(lev)->neighborY_SP,	para->getParD(lev)->neighborZ_SP,
-										  para->getParD(lev)->size_Mat_SP,	para->getParD(lev)->d0SP.f[0],		para->getParD(lev)->numberofthreads,
-										  para->getParD(lev)->evenOrOdd);
-			  }
-			  t_MP++;
-		  }
-
-		  //Copy Measure Values
-		  if ((t % (unsigned int)para->getclockCycleForMP()) == 0)
-		  {
-			  for (int lev = para->getCoarse(); lev <= para->getFine(); lev++)
-			  {
-				  cudaManager->cudaCopyMeasurePointsToHost(lev);
-				  para->copyMeasurePointsArrayToVector(lev);
-				  output << "\n Write MeasurePoints at level = " << lev << " and timestep = " << t << "\n";
-				  for (int j = 0; j < (int)para->getParH(lev)->MP.size(); j++)
-				  {
-					  MeasurePointWriter::writeMeasurePoints(para.get(), lev, j, t);
-				  }
-				  MeasurePointWriter::calcAndWriteMeanAndFluctuations(para.get(), lev, t, para->getTStartOut());
-			  }
-			  t_MP = 0;
-		  }
-	  }
-	  //////////////////////////////////////////////////////////////////////////////////
-
-
-
-	  //////////////////////////////////////////////////////////////////////////////////
-	  ////get concentration at the plane
-	  //////////////////////////////////////////////////////////////////////////////////
-	  if (para->getDiffOn()==true) 
-	  {
-		  PlaneConcThS27( para->getParD(0)->ConcPlaneIn,
-						  para->getParD(0)->cpTopIndex,
-						  para->getParD(0)->numberOfPointsCpTop,
-						  para->getParD(0)->geoSP,       
-						  para->getParD(0)->neighborX_SP, 
-						  para->getParD(0)->neighborY_SP, 
-						  para->getParD(0)->neighborZ_SP,
-						  para->getParD(0)->size_Mat_SP, 
-						  para->getParD(0)->numberofthreads,       
-						  para->getParD(0)->d27.f[0],    
-						  para->getParD(0)->evenOrOdd);
-		  getLastCudaError("PlaneConcThS27 execution failed"); 
-		  PlaneConcThS27( para->getParD(0)->ConcPlaneOut1,
-						  para->getParD(0)->cpBottomIndex,
-						  para->getParD(0)->numberOfPointsCpBottom,
-						  para->getParD(0)->geoSP,       
-						  para->getParD(0)->neighborX_SP, 
-						  para->getParD(0)->neighborY_SP, 
-						  para->getParD(0)->neighborZ_SP,
-						  para->getParD(0)->size_Mat_SP, 
-						  para->getParD(0)->numberofthreads,       
-						  para->getParD(0)->d27.f[0],    
-						  para->getParD(0)->evenOrOdd);
-		  getLastCudaError("PlaneConcThS27 execution failed"); 
-		  PlaneConcThS27( para->getParD(0)->ConcPlaneOut2,
-						  para->getParD(0)->QPress.kN,
-						  para->getParD(0)->QPress.kQ,
-						  para->getParD(0)->geoSP,       
-						  para->getParD(0)->neighborX_SP, 
-						  para->getParD(0)->neighborY_SP, 
-						  para->getParD(0)->neighborZ_SP,
-						  para->getParD(0)->size_Mat_SP, 
-						  para->getParD(0)->numberofthreads,       
-						  para->getParD(0)->d27.f[0],    
-						  para->getParD(0)->evenOrOdd);
-		  getLastCudaError("PlaneConcThS27 execution failed"); 
-		  //////////////////////////////////////////////////////////////////////////////////
-		  ////Calculation of concentration at the plane
-		  //////////////////////////////////////////////////////////////////////////////////
-		  calcPlaneConc(para.get(), cudaManager.get(), 0);
-	  }
-	  //////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////////////////////////////////////////
+        ////get concentration at the plane
+        //////////////////////////////////////////////////////////////////////////////////
+        if (para->getDiffOn() && para->getCalcPlaneConc()) 
+        {
+            PlaneConcThS27( para->getParD(0)->ConcPlaneIn,
+            		       para->getParD(0)->cpTopIndex,
+            		       para->getParD(0)->numberOfPointsCpTop,
+            		       para->getParD(0)->geoSP,       
+            		       para->getParD(0)->neighborX_SP, 
+            		       para->getParD(0)->neighborY_SP, 
+            		       para->getParD(0)->neighborZ_SP,
+            		       para->getParD(0)->size_Mat_SP, 
+            		       para->getParD(0)->numberofthreads,       
+            		       para->getParD(0)->d27.f[0],    
+            		       para->getParD(0)->evenOrOdd);
+            getLastCudaError("PlaneConcThS27 execution failed"); 
+            PlaneConcThS27( para->getParD(0)->ConcPlaneOut1,
+            		        para->getParD(0)->cpBottomIndex,
+            		        para->getParD(0)->numberOfPointsCpBottom,
+            		        para->getParD(0)->geoSP,       
+            		        para->getParD(0)->neighborX_SP, 
+            		        para->getParD(0)->neighborY_SP, 
+            		        para->getParD(0)->neighborZ_SP,
+            		        para->getParD(0)->size_Mat_SP, 
+            		        para->getParD(0)->numberofthreads,       
+            		        para->getParD(0)->d27.f[0],    
+            		        para->getParD(0)->evenOrOdd);
+            getLastCudaError("PlaneConcThS27 execution failed"); 
+            PlaneConcThS27( para->getParD(0)->ConcPlaneOut2,
+            		        para->getParD(0)->QPress.kN,
+            		        para->getParD(0)->QPress.kQ,
+            		        para->getParD(0)->geoSP,       
+            		        para->getParD(0)->neighborX_SP, 
+            		        para->getParD(0)->neighborY_SP, 
+            		        para->getParD(0)->neighborZ_SP,
+            		        para->getParD(0)->size_Mat_SP, 
+            		        para->getParD(0)->numberofthreads,       
+            		        para->getParD(0)->d27.f[0],    
+            		        para->getParD(0)->evenOrOdd);
+            getLastCudaError("PlaneConcThS27 execution failed"); 
+            //////////////////////////////////////////////////////////////////////////////////
+            ////Calculation of concentration at the plane
+            //////////////////////////////////////////////////////////////////////////////////
+            calcPlaneConc(para.get(), cudaManager.get(), 0);
+        }
+        //////////////////////////////////////////////////////////////////////////////////
 
 
 
@@ -1994,39 +679,16 @@ void Simulation::run()
             durchsatz  +=  (27.0+1.0) * 4.0 * 1000.0 * (t-para->getTStart()) * para->getParH(lev)->size_Mat_SP  / (ftimeE*1.0E9);
          }
          output << timerE << " / " << ftimeE << " \t " <<  fnups << " \t " << durchsatz << "\n";
-		 //////////////////////////////////////////////////////////////////////////
-		 //exchange data for valid post process
-		 if (para->getNumprocs() > 1)
-		 {
-			 ////1D domain decomposition
-			 //exchangePreCollDataGPU27(para, comm, 0);
-			 //3D domain decomposition
-			 //output << "(print) start exchange Pre X (level 0) \n";
-			 exchangePreCollDataXGPU27(para.get(), comm, cudaManager.get(), 0);
-			 //output << "(print) end exchange Pre X (level 0) \n";
-			 //output << "(print) start exchange Pre Y (level 0) \n";
-			 exchangePreCollDataYGPU27(para.get(), comm, cudaManager.get(), 0);
-			 //output << "(print) end exchange Pre Y (level 0) \n";
-			 //output << "(print) start exchange Pre Z (level 0) \n";
-			 exchangePreCollDataZGPU27(para.get(), comm, cudaManager.get(), 0);
-			 //output << "(print) end exchange Pre Z (level 0) \n";
-			 //////////////////////////////////////////////////////////////////////////
-			 //3D domain decomposition convection diffusion
-			 if (para->getDiffOn()==true)
-			 {
-				 exchangePreCollDataADXGPU27(para.get(), comm, cudaManager.get(), 0);
-				 exchangePreCollDataADYGPU27(para.get(), comm, cudaManager.get(), 0);
-				 exchangePreCollDataADZGPU27(para.get(), comm, cudaManager.get(), 0);
-			 }
-		 }
-		 //////////////////////////////////////////////////////////////////////////
 
          if( para->getPrintFiles() )
          {
             output << "Dateien schreiben t=" << t << "...";
-            ////////////////////////////////////////////////////////////////////////////////
             for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
             {
+		        //////////////////////////////////////////////////////////////////////////
+		        //exchange data for valid post process
+		        exchangeMultiGPU(para.get(), comm, cudaManager.get(), lev);
+                //////////////////////////////////////////////////////////////////////////
                //if (para->getD3Qxx()==19)
                //{
                   //CalcMac(para->getParD(lev)->vx,     para->getParD(lev)->vy,       para->getParD(lev)->vz,      para->getParD(lev)->rho, 
@@ -2135,7 +797,9 @@ void Simulation::run()
 			   }
 
 			   //////////////////////////////////////////////////////////////////////////
-			   VeloASCIIWriter::writeVelocitiesAsTXT(para.get(), lev, t);
+               //TODO: implement flag to write ASCII data
+			   if (para->getWriteVeloASCIIfiles())
+				   VeloASCIIWriter::writeVelocitiesAsTXT(para.get(), lev, t);
 			   //////////////////////////////////////////////////////////////////////////
                if( this->kineticEnergyAnalyzer || this->enstrophyAnalyzer )
                {
@@ -2279,7 +943,7 @@ void Simulation::run()
 			////////////////////////////////////////////////////////////////////////
 			dataWriter->writeTimestep(para, t);
 			////////////////////////////////////////////////////////////////////////
-			//printDragLift(para, t);
+            if (para->getCalcDragLift()) printDragLift(para.get(), cudaManager.get(), t);
 			////////////////////////////////////////////////////////////////////////
 			if (para->getCalcParticle()) copyAndPrintParticles(para.get(), cudaManager.get(), t, false);
 			////////////////////////////////////////////////////////////////////////
diff --git a/src/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/VirtualFluids_GPU/Parameter/Parameter.cpp
index 3d3c0108bc5092ed798ac449a484167709464bb1..daef7ff2ef8e9fafc503d96422bc903348bc68df 100644
--- a/src/VirtualFluids_GPU/Parameter/Parameter.cpp
+++ b/src/VirtualFluids_GPU/Parameter/Parameter.cpp
@@ -96,6 +96,26 @@ Parameter::Parameter(SPtr<ConfigData> configData, Communicator* comm)
 	else
 		this->setCalcMedian(false);
 	//////////////////////////////////////////////////////////////////////////
+	if (configData->isCalcDragLiftInConfigFile())
+		this->setCalcDragLift(configData->getCalcDragLift());
+	else
+		this->setCalcDragLift(false);
+	//////////////////////////////////////////////////////////////////////////
+	if (configData->isCalcCpInConfigFile())
+		this->setCalcCp(configData->getCalcCp());
+	else
+		this->setCalcCp(false);
+	//////////////////////////////////////////////////////////////////////////
+	if (configData->isWriteVeloASCIIfilesInConfigFile())
+		this->setWriteVeloASCIIfiles(configData->getWriteVeloASCIIfiles());
+	else
+		this->setWriteVeloASCIIfiles(false);
+	//////////////////////////////////////////////////////////////////////////
+	if (configData->isCalcPlaneConcInConfigFile())
+		this->setCalcPlaneConc(configData->getCalcPlaneConc());
+	else
+		this->setCalcPlaneConc(false);
+	//////////////////////////////////////////////////////////////////////////
 	if (configData->isConcFileInConfigFile())
 		this->setConcFile(configData->getConcFile());
 	else
@@ -3452,8 +3472,24 @@ void Parameter::setCalcMedian(bool calcMedian)
 {
 	ic.calcMedian = calcMedian;
 }
-void Parameter::setTimeCalcMedStart(int CalcMedStart)
+void Parameter::setCalcDragLift(bool calcDragLift)
+{
+	this->calcDragLift = calcDragLift;
+}
+void Parameter::setCalcCp(bool calcCp)
+{
+	this->calcCp = calcCp;
+}
+void Parameter::setWriteVeloASCIIfiles(bool writeVeloASCII)
 {
+	this->writeVeloASCII = writeVeloASCII;
+}
+void Parameter::setCalcPlaneConc(bool calcPlaneConc)
+{
+	this->calcPlaneConc = calcPlaneConc;
+}
+void Parameter::setTimeCalcMedStart(int CalcMedStart)
+{		
 	ic.tCalcMedStart = CalcMedStart;
 }
 void Parameter::setTimeCalcMedEnd(int CalcMedEnd)
@@ -4433,10 +4469,26 @@ bool Parameter::getCalcMedian()
 {
 	return ic.calcMedian;
 }
+bool Parameter::getCalcDragLift()
+{
+	return this->calcDragLift;
+}
+bool Parameter::getCalcCp()
+{
+	return this->calcCp;
+}
 bool Parameter::getCalcParticle()
 {
 	return this->calcParticles;
 }
+bool Parameter::getWriteVeloASCIIfiles()
+{
+	return this->writeVeloASCII;
+}
+bool Parameter::getCalcPlaneConc()
+{
+	return this->calcPlaneConc;
+}
 int Parameter::getTimeCalcMedStart()
 {
 	return ic.tCalcMedStart;
diff --git a/src/VirtualFluids_GPU/Parameter/Parameter.h b/src/VirtualFluids_GPU/Parameter/Parameter.h
index 45c45268a586ad7c10bc3cc8def89527fc683191..c090d4d18cc4627f1ff8392e6ca807391aa4fb6e 100644
--- a/src/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/VirtualFluids_GPU/Parameter/Parameter.h
@@ -159,7 +159,7 @@ struct ParameterStruct{
 
 	//BC's////////////////////
 	QforBoundaryConditions  QWall,   Qinflow,      Qoutflow,      QSlip;
-	unsigned int            kQ,      kInflowQ,     kOutflowQ,     kSlipQ;
+	unsigned int            kQ=0,      kInflowQ=0,     kOutflowQ=0,     kSlipQ=0;
 	unsigned int            kQread,  kInflowQread, kOutflowQread, kSlipQread;
 
 	QforBoundaryConditions  QpressX0,QpressX1,QpressY0,QpressY1,QpressZ0,QpressZ1;
@@ -171,7 +171,7 @@ struct ParameterStruct{
 	QforBoundaryConditions  QOutflowNormalX, QOutflowNormalY, QOutflowNormalZ;
 	QforBoundaryConditions  QInlet, QOutlet, QPeriodic;
 	unsigned int            kInletQread, kOutletQread;
-	unsigned int            kPressQ, kPressQread;
+	unsigned int            kPressQ=0, kPressQread;
 	//testRoundoffError
 	Distributions27         kDistTestRE;
 
@@ -619,6 +619,10 @@ public:
 	void setTStartOut(unsigned int tStartOut);
 	void setTimestepOfCoarseLevel(unsigned int timestep);
 	void setCalcMedian(bool calcMedian);
+	void setCalcDragLift(bool calcDragLift);
+	void setCalcCp(bool calcCp);
+	void setWriteVeloASCIIfiles(bool writeVeloASCII);
+	void setCalcPlaneConc(bool calcPlaneConc);
 	void setTimeCalcMedStart(int CalcMedStart);
 	void setTimeCalcMedEnd(int CalcMedEnd);
 	void setMaxDev(int maxdev);
@@ -812,7 +816,11 @@ public:
 	bool getPrintFiles();
 	bool getReadGeo();
 	bool getCalcMedian();
+	bool getCalcDragLift();
+	bool getCalcCp();
 	bool getCalcParticle();
+	bool getWriteVeloASCIIfiles();
+	bool getCalcPlaneConc();
 	int getFine();
 	int getCoarse();
 	int getParticleBasicLevel();
@@ -1023,6 +1031,9 @@ private:
 	bool compOn;
 	bool diffOn;
 	bool isF3;
+	bool calcDragLift, calcCp;
+	bool writeVeloASCII;
+	bool calcPlaneConc;
 	int diffMod;
 	int coarse, fine, maxlevel;
 	int factor_gridNZ;
diff --git a/targets/apps/LBM/gridGeneratorTest/gridGeneratorTest.cpp b/targets/apps/LBM/gridGeneratorTest/gridGeneratorTest.cpp
index 866770733534061ccf5010f7ceb29c5b5b6cd101..401ffc1efe60aded6341ee18de056b96d4b986da 100644
--- a/targets/apps/LBM/gridGeneratorTest/gridGeneratorTest.cpp
+++ b/targets/apps/LBM/gridGeneratorTest/gridGeneratorTest.cpp
@@ -184,10 +184,10 @@ void multipleLevel(const std::string& configPath)
         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         {
             real dx = 1.0 / 16.0;
-            real vx = 0.0125;
+            real vx = 0.05;
 
             real D = 1.0;
-            real Re = 1140000;
+            real Re = 100;
 
             para->setOutputPath( "F:/Work/Computations/out/Sphere/" );
             para->setOutputPrefix( "Sphere" );
@@ -204,9 +204,11 @@ void multipleLevel(const std::string& configPath)
             para->setTOut( 1000 );
             para->setTEnd( 100000 );
 
+            para->setCalcDragLift(true);
+
             para->setUseWale(false);
 
-            para->setMainKernel(kernelMapper->getEnum("CumulantK20Comp"));
+            para->setMainKernel(kernelMapper->getEnum("CumulantK15Comp"));
 
             //////////////////////////////////////////////////////////////////////////
 
@@ -218,18 +220,18 @@ void multipleLevel(const std::string& configPath)
 
             Object* sphere = new Sphere( 0, 0, 0, 0.5*D );
 
-            gridBuilder->addCoarseGrid(-2.0*D, -5.5*D, -5.5*D,
-                                        9.0*D,  5.5*D,  5.5*D, dx);  // DrivAer
+            gridBuilder->addCoarseGrid(-2.0*D, -2.5*D, -2.5*D,
+                                        9.0*D,  2.5*D,  2.5*D, dx);  // DrivAer
 
             //gridBuilder->setNumberOfLayers(10,8);
             //gridBuilder->addGrid(SphereSTL, 2);
             
             gridBuilder->setNumberOfLayers(4,8);
-            gridBuilder->addGrid(sphereRef_1_STL, 3);
-            gridBuilder->addGrid(sphereRef_2_STL, 4);
+            gridBuilder->addGrid(sphereRef_1_STL, 1);
+            //gridBuilder->addGrid(sphereRef_2_STL, 4);
 
-            gridBuilder->setNumberOfLayers(10,8);
-            gridBuilder->addGrid(sphere, 5);
+            //gridBuilder->setNumberOfLayers(10,8);
+            //gridBuilder->addGrid(sphere, 5);
 
 
         
@@ -631,6 +633,37 @@ void multipleLevel(const std::string& configPath)
         if( testcase == MultiGPU )
         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         {
+
+            real dx = 1.0 / 40.0;
+            real vx = 0.05;
+
+            real D = 1.0;
+            real Re = 100;
+
+            para->setOutputPath( "F:/Work/Computations/out/Sphere/" );
+            para->setOutputPrefix( "Sphere" );
+
+            para->setFName(para->getOutputPath() + "/" + para->getOutputPrefix());
+
+            para->setPrintFiles(true);
+    
+            para->setVelocity( vx );
+            para->setViscosity( ( vx * D / dx ) / Re );
+
+            para->setVelocityRatio(1.0);
+
+            para->setTOut( 1000 );
+            para->setTEnd( 100000 );
+
+            para->setCalcDragLift(true);
+
+            para->setUseWale(false);
+
+            para->setMainKernel(kernelMapper->getEnum("CumulantK15Comp"));
+
+            para->setDevices( { 0, 1 } );
+            para->setMaxDev(2);
+
             //const uint generatePart = 1;
             const uint generatePart = Communicator::getInstanz()->getPID();
             
@@ -646,10 +679,7 @@ void multipleLevel(const std::string& configPath)
 
             logging::Logger::addStream(&logFile2);
 
-            real dx = 1.0 / 40.0;
-            real vx = 0.05;
-
-            TriangularMesh* triangularMesh = TriangularMesh::make("F:/Work/Computations/gridGenerator/stl/ShpereNotOptimal.stl");
+            TriangularMesh* triangularMesh = TriangularMesh::make("F:/Work/Computations/gridGenerator/stl/Sphere/SphereNotOptimal.stl");
             //TriangularMesh* triangularMesh = TriangularMesh::make("stl/ShpereNotOptimal.lnx.stl");
 
             // all