diff --git a/CMake/cmake_config_files/MOLLOK.config.cmake b/CMake/cmake_config_files/MOLLOK.config.cmake
index 4bb199d69dd2f88f786752374d244c643ca51d8a..2407cda6287cd0e171453d1559ab6585b0a09a33 100644
--- a/CMake/cmake_config_files/MOLLOK.config.cmake
+++ b/CMake/cmake_config_files/MOLLOK.config.cmake
@@ -5,8 +5,6 @@
 #################################################################################
 
 #SET TO CORRECT PATH:
-SET(BOOST_ROOT  "D:/libraries/boost_1_74_0"  CACHE PATH "BOOST_ROOT")
-SET(BOOST_LIBRARYDIR  "D:/libraries/boost_1_74_0/stageMSVC64VS2019/lib" CACHE PATH "BOOST_LIBRARYDIR")
 SET(CMAKE_CUDA_ARCHITECTURES 52)
 
 SET(PATH_NUMERICAL_TESTS "D:/out/numericalTests/")
diff --git a/apps/gpu/LBM/WTG_RUB/CMakeLists.txt b/apps/gpu/LBM/WTG_RUB/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8bac54bf335a26aaecbf8cbb5a1474e67bd99b89
--- /dev/null
+++ b/apps/gpu/LBM/WTG_RUB/CMakeLists.txt
@@ -0,0 +1,5 @@
+PROJECT(WTG_RUB LANGUAGES CUDA CXX)
+
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator MPI::MPI_CXX FILES WTG_RUB.cpp)
+
+set_source_files_properties(WTG_RUB.cpp PROPERTIES LANGUAGE CUDA)
diff --git a/apps/gpu/LBM/WTG_RUB/WTG_RUB.cpp b/apps/gpu/LBM/WTG_RUB/WTG_RUB.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..12bc850bc718952278b5f0e9e10470eea3ff18b3
--- /dev/null
+++ b/apps/gpu/LBM/WTG_RUB/WTG_RUB.cpp
@@ -0,0 +1,514 @@
+#define _USE_MATH_DEFINES
+#include <math.h>
+#include <string>
+#include <sstream>
+#include <iostream>
+#include <stdexcept>
+#include <fstream>
+#include <exception>
+#include <memory>
+
+#include "mpi.h"
+
+//////////////////////////////////////////////////////////////////////////
+
+#include "Core/DataTypes.h"
+#include "PointerDefinitions.h"
+
+#include "Core/LbmOrGks.h"
+#include "Core/Input/Input.h"
+#include "Core/StringUtilities/StringUtil.h"
+#include "Core/Input/ConfigFileReader/ConfigFileReader.h"
+
+#include "Core/VectorTypes.h"
+#include "Core/Logger/Logger.h"
+
+//////////////////////////////////////////////////////////////////////////
+
+#include "GridGenerator/grid/GridBuilder/LevelGridBuilder.h"
+#include "GridGenerator/grid/GridBuilder/MultipleGridBuilder.h"
+#include "GridGenerator/grid/BoundaryConditions/Side.h"
+#include "GridGenerator/grid/GridFactory.h"
+#include "GridGenerator/geometries/TriangularMesh/TriangularMesh.h"
+#include "GridGenerator/geometries/Conglomerate/Conglomerate.h"
+
+#include "GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h"
+#include "GridGenerator/io/GridVTKWriter/GridVTKWriter.h"
+#include "GridGenerator/io/STLReaderWriter/STLReader.h"
+#include "GridGenerator/io/STLReaderWriter/STLWriter.h"
+
+//////////////////////////////////////////////////////////////////////////
+
+#include "VirtualFluids_GPU/LBM/Simulation.h"
+#include "VirtualFluids_GPU/Communication/Communicator.h"
+#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
+#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "VirtualFluids_GPU/Parameter/Parameter.h"
+#include "VirtualFluids_GPU/Output/FileWriter.h"
+
+#include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
+#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
+
+#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+//          U s e r    s e t t i n g s
+//
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+LbmOrGks lbmOrGks = LBM;
+
+const real L  = 1.0;
+
+const real Re = 500.0;// 1000.0;
+
+const real velocity  = 1.0;
+
+int variant = 1;
+real rotationOfCity;
+real z_offset = 0.0; // only if baseplate is in use (currently not!! not important)
+
+// 1: original setup of Lennard Lux (6 level, 4.0 cm -> 1.25 mm)
+// 2: setup 1 of MSch               (4 level, 1.0 cm -> 1.25 mm)
+// 3: setup 2 of MSch               (5 level, 1.6 cm -> 1.0  mm)
+int setupDomain = 3;
+
+
+
+std::string path("D:/out/WTG_RUB"); //Mollok
+std::string inputPath("D:/out/WTG_RUB/input/");
+
+std::string simulationName("RUB");
+
+const uint timeStepStartOut = 0;
+const uint timeStepOut = 10000;
+const uint timeStepEnd = 100000;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void addFineGrids(SPtr<MultipleGridBuilder> gridBuilder, uint &maxLevel, real &rotationOfCity);
+
+std::string chooseVariation();
+
+void multipleLevel(const std::string& configPath)
+{
+    logging::Logger::addStream(&std::cout);
+    logging::Logger::setDebugLevel(logging::Logger::Level::INFO_LOW);
+    logging::Logger::timeStamp(logging::Logger::ENABLE);
+    logging::Logger::enablePrintedRankNumbers(logging::Logger::ENABLE);
+
+    auto gridFactory = GridFactory::make();
+    gridFactory->setGridStrategy(Device::CPU);
+    gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::POINT_IN_OBJECT);
+
+    auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory);
+    
+	vf::gpu::Communicator* comm = vf::gpu::Communicator::getInstanz();
+	SPtr<ConfigFileReader> configReader = ConfigFileReader::getNewInstance();
+
+    std::cout << configPath << std::endl;
+	SPtr<ConfigData> configData = configReader->readConfigFile(configPath.c_str());
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    real dx = 0;
+    real viscosityLB = (real)1.0e-03;
+    uint maxLevel    = 1;
+
+    if (setupDomain == 1) {
+        dx          = (real)4;
+        maxLevel    = 5;
+        viscosityLB = (real)3.75e-06; // LB units
+    } else if (setupDomain == 2) {
+        dx          = (real)1;   
+        maxLevel    = 3;
+        viscosityLB = (real)1.5e-05; // LB units
+    } else if (setupDomain == 3) {
+        dx          = (real)1.6;
+        maxLevel    = 4;
+        viscosityLB = (real)9.375e-06; // LB units
+    }
+    
+    real x_min = 0.0;
+    real x_max = 1250.0;
+    real y_min = 0.0;
+    real y_max = 190.0;
+    real z_min = 0.0 + z_offset;
+    real z_max = 160.0 + z_offset;
+
+    //TriangularMesh *RubSTL      = TriangularMesh::make(inputPath + "stl/Var02_0deg_FD_b.stl");
+    TriangularMesh *RubSTL      = TriangularMesh::make(inputPath + "stl/" + chooseVariation() + ".stl");
+    // vector<real> originOfCityXY = { 600.0, y_max / 2, z_offset };
+
+
+    gridBuilder->addCoarseGrid(x_min, y_min, z_min, 
+                               x_max, y_max, z_max, dx);
+
+    gridBuilder->setNumberOfLayers(0, 0);
+
+    addFineGrids(gridBuilder, maxLevel, rotationOfCity);
+
+    //// adding solid CityGeometry to gridbuilder
+    gridBuilder->addGeometry(RubSTL);
+
+	gridBuilder->setPeriodicBoundaryCondition(false, false, false);
+
+	gridBuilder->buildGrids(lbmOrGks, false); // buildGrids() has to be called before setting the BCs!!!!
+
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    SPtr<Parameter>    para         = Parameter::make(configData, comm);
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    const real velocityLB = (real)0.0844; // LB units
+
+	//const real vx = velocityLB / (real)sqrt(2.0); // LB units
+	//const real vy = velocityLB / (real)sqrt(2.0); // LB units
+
+    *logging::out << logging::Logger::INFO_HIGH << "velocity  [dx/dt] = " << velocityLB << " \n";
+    *logging::out << logging::Logger::INFO_HIGH << "viscosity [dx^2/dt] = " << viscosityLB << "\n";
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+	para->setDevices(std::vector<uint>{(uint)0});
+
+    para->setOutputPath( path );
+    para->setOutputPrefix( simulationName );
+
+    para->setFName(para->getOutputPath() + "/" + para->getOutputPrefix());
+
+    para->setPrintFiles(true);
+
+    para->setMaxLevel(maxLevel);
+
+    para->setVelocity(velocityLB);
+    para->setViscosity(viscosityLB);
+
+    para->setVelocityRatio(velocity/ velocityLB);
+
+	para->setMainKernel("CumulantK17CompChim");
+
+	para->setInitialCondition([&](real coordX, real coordY, real coordZ, real &rho, real &vx, real &vy, real &vz) {
+        rho = (real)0.0;
+        vx  = (real)0.0; //(6 * velocityLB * coordZ * (L - coordZ) / (L * L));
+        vy  = (real)0.0;
+        vz  = (real)0.0;
+    });
+
+    para->setTOut( timeStepOut );
+    para->setTEnd( timeStepEnd );
+
+    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    gridBuilder->setVelocityBoundaryCondition(SideType::MX, velocityLB, 0.0, 0.0);
+    gridBuilder->setVelocityBoundaryCondition(SideType::PY, 0.0, 0.0, 0.0);
+    gridBuilder->setVelocityBoundaryCondition(SideType::MY, 0.0, 0.0, 0.0);
+    gridBuilder->setVelocityBoundaryCondition(SideType::PZ, 0.0, 0.0, 0.0);
+    gridBuilder->setVelocityBoundaryCondition(SideType::MZ, 0.0, 0.0, 0.0);
+    gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
+
+    gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    SPtr<CudaMemoryManager> cudaMemoryManager = CudaMemoryManager::make(para);
+
+    SPtr<GridProvider> gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager);
+
+    Simulation sim;
+    SPtr<FileWriter> fileWriter = SPtr<FileWriter>(new FileWriter());
+    SPtr<KernelFactoryImp> kernelFactory = KernelFactoryImp::getInstance();
+    SPtr<PreProcessorFactoryImp> preProcessorFactory = PreProcessorFactoryImp::getInstance();
+    sim.setFactories(kernelFactory, preProcessorFactory);
+    sim.init(para, gridGenerator, fileWriter, cudaMemoryManager);
+    sim.run();
+    sim.free();
+
+}
+
+void addFineGrids(SPtr<MultipleGridBuilder> gridBuilder, uint &maxLevel, real &rotationOfCity)
+{
+    if (setupDomain == 1) {
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
+        // creates Cuboids (FG1 to FG3, lvl 1 to lvl 3) and add STLs (FG4 to FG5, lvl 4 to lvl 5) depending on maxLevel
+        // and rotationOfCity; also adds FineGrids(FGs) to gridbuilder
+
+        // GridList(CG = coarse grid, fg = fine grid)
+        // CG  -> dx = 4 cm;      lvl 0
+        // FG1 -> dx = 2 cm;      lvl 1
+        // FG2 -> dx = 1 cm;      lvl 2
+        // FG3 -> dx = 5 mm;      lvl 3
+        // FG4 -> dx = 2,5 mm;    lvl 4
+        // FG5 -> dx = 1,25 mm;   lvl 5
+        //
+        // FineGrid Level 1 ->dx = 2 cm; lvl 1
+        auto FG1 = new Cuboid(-20, -20, -5 + z_offset, 800, 200, 75 + z_offset);
+
+        // FineGrid Level 2 -> dx = 1 cm; lvl 2
+        auto FG2_1 = new Cuboid(-20, -20, -5 + z_offset, 760, 200, 10 + z_offset);
+        auto FG2_2 = new Cuboid(500, -20,  5 + z_offset, 680, 210, 50 + z_offset);
+        auto FG2   = new Conglomerate();
+        FG2->add(FG2_1);
+        FG2->add(FG2_2);
+
+        // FineGrid Level 3 ->dx = 5 mm; lvl 3
+        auto FG3_1 = new Cuboid(517, -20, -5 + z_offset, 665, 200, 30 + z_offset);
+        auto FG3_2 = new Cuboid(550, 58, -5 + z_offset, 650, 132, 40 + z_offset);
+        auto FG3   = new Conglomerate();
+        FG3->add(FG3_1);
+        FG3->add(FG3_2);
+
+        // Adding FineGrids 1 to 5 depending on maxLevel, FG4 and FG5 require different STL-files depending on
+        // rotationOfCity
+        if (maxLevel >= 1) {
+            gridBuilder->addGrid(FG1, 1);
+            if (maxLevel >= 2) {
+                gridBuilder->addGrid(FG2, 2);
+                if (maxLevel >= 3) {
+                    gridBuilder->addGrid(FG3, 3);
+                    if (maxLevel >= 4) {
+                        if (rotationOfCity == 0.0) {
+                            TriangularMesh *FG4 = TriangularMesh::make(inputPath + "stl/FG4_0deg.stl");
+                            gridBuilder->addGrid(FG4, 4);
+                        } else {
+                            TriangularMesh *FG4 = TriangularMesh::make(inputPath + "stl/FG4_63deg.stl");
+                            gridBuilder->addGrid(FG4, 4);
+                        }
+
+                        if (maxLevel == 5) {
+                            if (rotationOfCity == 0.0) {
+                                TriangularMesh *FG5 = TriangularMesh::make(inputPath + "stl/FG5_0deg.stl");
+                                gridBuilder->addGrid(FG5, 5);
+                            } else {
+                                TriangularMesh *FG5 = TriangularMesh::make(inputPath + "stl/FG5_63deg.stl");
+                                gridBuilder->addGrid(FG5, 5);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    else if (setupDomain == 2) {
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
+        // creates Cuboids (FG1, lvl 1) and add STLs (FG2 to FG3, lvl 2 to lvl 3) depending on maxLevel
+        // and rotationOfCity; also adds FineGrids(FGs) to gridbuilder
+        //
+        // GridList(CG = coarse grid, fg = fine grid)
+        // CG  -> dx = 1 cm;      lvl 0
+        // FG1 -> dx = 5 mm;      lvl 1
+        // FG2 -> dx = 2,5 mm;    lvl 2
+        // FG3 -> dx = 1,25 mm;   lvl 3
+        //
+        // FineGrid Level 1 -> dx = 5 mm; lvl 1
+        //auto FG1_1 = new Cuboid(-20, -20, -5 + z_offset, 760, 200, 10 + z_offset);
+        auto FG1_1 = new Cuboid(-20, -20, -5 + z_offset, 760, 200, 20 + z_offset);
+        auto FG1_2 = new Cuboid(500, -20,  5 + z_offset, 680, 210, 50 + z_offset);
+        auto FG1   = new Conglomerate();
+        FG1->add(FG1_1);
+        FG1->add(FG1_2);
+
+        // Adding FineGrids 1 to 5 depending on maxLevel, FG4 and FG5 require different STL-files depending on
+        // rotationOfCity
+        if (maxLevel >= 1) {
+            gridBuilder->addGrid(FG1, 1);
+            if (maxLevel >= 2) {
+                if (rotationOfCity == 0.0) {
+                    TriangularMesh *FG2 = TriangularMesh::make(inputPath + "stl/FG4_0deg.stl");
+                    gridBuilder->addGrid(FG2, 2);
+                } else {
+                    TriangularMesh *FG2 = TriangularMesh::make(inputPath + "stl/FG4_63deg.stl");
+                    gridBuilder->addGrid(FG2, 2);
+                }
+
+                if (maxLevel == 3) {
+                    if (rotationOfCity == 0.0) {
+                        TriangularMesh *FG3 = TriangularMesh::make(inputPath + "stl/FG5_0deg.stl");
+                        gridBuilder->addGrid(FG3, 3);
+                    } else {
+                        TriangularMesh *FG3 = TriangularMesh::make(inputPath + "stl/FG5_63deg.stl");
+                        gridBuilder->addGrid(FG3, 3);
+                    }
+                }
+            }
+        }
+    } 
+    else if (setupDomain == 3) {
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
+        // creates Cuboids (FG1 to FG2, lvl 1 to lvl 2) and add STLs (FG3 to FG4, lvl 3 to lvl 4) depending on maxLevel
+        // and rotationOfCity; also adds FineGrids(FGs) to gridbuilder
+
+        // GridList(CG = coarse grid, fg = fine grid)
+        // CG  -> dx = 1.6 cm;   lvl 0
+        // FG1 -> dx = 8.0 mm;   lvl 1
+        // FG2 -> dx = 4.0 mm;   lvl 2
+        // FG3 -> dx = 2.0 mm;   lvl 3
+        // FG4 -> dx = 1.0 mm;   lvl 4
+        //
+        //// FineGrid Level 1 ->dx = 8.0 mm; lvl 1
+        //auto FG1 = new Cuboid(-20, -20, -5 + z_offset, 800, 200, 75 + z_offset);
+
+        // FineGrid Level 1 -> dx = 8.0 mm; lvl 1
+        auto FG1_1 = new Cuboid(-20, -20, -5 + z_offset, 780, 200, 30 + z_offset);
+        auto FG1_2 = new Cuboid(500, -20,  5 + z_offset, 720, 210, 75 + z_offset);
+        auto FG1   = new Conglomerate();
+        FG1->add(FG1_1);
+        FG1->add(FG1_2);
+
+        // FineGrid Level 2 -> dx = 4.0 mm; lvl 2
+        auto FG2_1 = new Cuboid(-20, -20, -5 + z_offset, 760, 200, 10 + z_offset);
+        auto FG2_2 = new Cuboid(520, -20,  5 + z_offset, 700, 210, 50 + z_offset);
+        auto FG2   = new Conglomerate();
+        FG2->add(FG2_1);
+        FG2->add(FG2_2);
+
+        // Adding FineGrids 1 to 4 depending on maxLevel, FG3 and FG4 require different STL-files depending on
+        // rotationOfCity
+        if (maxLevel >= 1) {
+            gridBuilder->addGrid(FG1, 1);
+            if (maxLevel >= 2) {
+                gridBuilder->addGrid(FG2, 2);
+                if (maxLevel >= 3) {
+                    if (rotationOfCity == 0.0) {
+                        TriangularMesh *FG3 = TriangularMesh::make(inputPath + "stl/FG4_0deg.stl");
+                        gridBuilder->addGrid(FG3, 3);
+                    } else {
+                        TriangularMesh *FG3 = TriangularMesh::make(inputPath + "stl/FG4_63deg.stl");
+                        gridBuilder->addGrid(FG3, 3);
+                    }
+
+                    if (maxLevel == 4) {
+                        if (rotationOfCity == 0.0) {
+                            TriangularMesh *FG4 = TriangularMesh::make(inputPath + "stl/FG5_0deg.stl");
+                            gridBuilder->addGrid(FG4, 4);
+                        } else {
+                            TriangularMesh *FG4 = TriangularMesh::make(inputPath + "stl/FG5_63deg.stl");
+                            gridBuilder->addGrid(FG4, 4);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+
+}
+
+std::string chooseVariation()
+{
+    switch (variant) {
+        case 1:
+            simulationName = "Var01_0deg_FD_a";
+            break;
+        case 2:
+            simulationName = "Var02_0deg_FD_b";
+            break;
+        case 3:
+            simulationName = "Var03_0deg_FD_c";
+            break;
+        case 4:
+            simulationName = "Var04_0deg_SD_a";
+            break;
+        case 5:
+            simulationName = "Var05_0deg_SD_b";
+            break;
+        case 6:
+            simulationName = "Var06_0deg_SD_c";
+            break;
+        case 7:
+            simulationName = "Var07_63deg_FD_a";
+            break;
+        case 8:
+            simulationName = "Var08_63deg_FD_b";
+            break;
+        case 9:
+            simulationName = "Var09_63deg_FD_c";
+            break;
+        case 10:
+            simulationName = "Var10_63deg_SD_a";
+            break;
+        case 11:
+            simulationName = "Var11_63deg_SD_b";
+            break;
+        case 12:
+            simulationName = "Var12_63deg_SD_c";
+            break;
+        default:
+            std::cerr << "Warning: no variant selected. Running with Default variant V01!" << std::endl;
+            simulationName = "Var01_0deg_FD_a";
+            rotationOfCity = 0.0;
+            return simulationName;
+    }
+
+    if ((0 < variant) && (variant <= 6))
+        rotationOfCity = (real)0.0;
+    else if ((6 < variant) && (variant <= 12))
+        rotationOfCity = (real)63.295;
+
+    std::cout << "Variant selected. Simulation name is: " << simulationName << std::endl;
+    std::cout << "Rotation selected: " << rotationOfCity << std::endl;
+
+    return simulationName;
+}
+
+
+int main( int argc, char* argv[])
+{
+    MPI_Init(&argc, &argv);
+    std::string str, str2; 
+    if ( argv != NULL )
+    {
+        //str = static_cast<std::string>(argv[0]);
+        
+        try
+        {
+            //////////////////////////////////////////////////////////////////////////
+
+			std::string targetPath;
+
+			targetPath = __FILE__;
+
+			targetPath = targetPath.substr(0, targetPath.find_last_of('/') + 1);
+
+
+
+			std::cout << targetPath << std::endl;
+
+			multipleLevel(targetPath + "configDrivenCavity.txt");
+
+            //////////////////////////////////////////////////////////////////////////
+		}
+        catch (const std::bad_alloc& e)
+        { 
+            *logging::out << logging::Logger::LOGGER_ERROR << "Bad Alloc:" << e.what() << "\n";
+        }
+        catch (const std::exception& e)
+        {   
+            *logging::out << logging::Logger::LOGGER_ERROR << e.what() << "\n";
+        }
+        catch (...)
+        {
+            *logging::out << logging::Logger::LOGGER_ERROR << "Unknown exception!\n";
+        }
+    }
+
+   MPI_Finalize();
+   return 0;
+}
diff --git a/apps/gpu/LBM/WTG_RUB/configDrivenCavity.txt b/apps/gpu/LBM/WTG_RUB/configDrivenCavity.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a3d6622d50700e554dcf3429f0c51e07f5c83ead
--- /dev/null
+++ b/apps/gpu/LBM/WTG_RUB/configDrivenCavity.txt
@@ -0,0 +1,36 @@
+##################################################
+#GPU Mapping
+##################################################
+#Devices="0 1 2 3"
+#NumberOfDevices=4
+
+##################################################
+#informations for Writing
+##################################################
+#Path="E:/DrivenCavity/results"
+#Path="F:/Work/Computations/out/DrivenCavity/"
+#Prefix="DrivenCavity" 
+#WriteGrid=true
+##################################################
+#informations for reading
+##################################################
+#GridPath="E:/DrivenCavity/dummy"
+GridPath="C:"
+
+##################################################
+#number of grid levels
+##################################################
+#NOGL=1
+
+##################################################
+#LBM Version
+##################################################
+#D3Qxx=27
+#MainKernelName=CumulantAA2016CompSP27
+
+##################################################
+#simulation parameter
+##################################################
+#TimeEnd=100000
+#TimeOut=1000 
+#TimeStartOut=0
\ No newline at end of file
diff --git a/gpu.cmake b/gpu.cmake
index b982a1abf933a241e81bea71865184764f847311..5e795cf3cbbddf9c0ef6ab021f6775caf692a753 100644
--- a/gpu.cmake
+++ b/gpu.cmake
@@ -40,6 +40,7 @@ IF (BUILD_VF_GPU)
     #add_subdirectory(targets/apps/LBM/BaselMultiGPU)
 
     add_subdirectory(apps/gpu/LBM/DrivenCavity)
+    #add_subdirectory(apps/gpu/LBM/WTG_RUB)
     #add_subdirectory(apps/gpu/LBM/gridGeneratorTest)
     #add_subdirectory(apps/gpu/LBM/TGV_3D)
     #add_subdirectory(apps/gpu/LBM/TGV_3D_MultiGPU)
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.cpp b/src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.cpp
index 066c55b9f30bd7537dfb829f3b953fb8a99a2cae..1adb709c5eb4f391756d455a53717a0d9cf72858 100644
--- a/src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.cpp
+++ b/src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.cpp
@@ -74,7 +74,7 @@ void allocMedianAD(Parameter* para, CudaMemoryManager* cudaManager)
 {
 	for (int lev = para->getCoarse(); lev <= para->getFine(); lev++)
 	{
-		para->cudaAllocMedianOutAD(lev);
+        cudaManager->cudaAllocMedianOutAD(lev);
 		for (unsigned int i = 0; i < para->getParH(lev)->size_Mat_SP; i++)
 		{
 			para->getParH(lev)->vx_SP_Med_Out[i]    = (real)0.0;
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
index cecb2fdbf86505ff3976e2d13b2ff0539eae98f5..9b90e03648c3485dc496dac86deadeb7247e6a58 100644
--- a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
+++ b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
@@ -336,13 +336,21 @@ void postCollisionBC(Parameter* para, int level, unsigned int t)
         //           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");
+        //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");
+
+   		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");
 
         //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], 
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
index 2582e6918bd105d81964aba56dcdb661b59025bf..3ce1093d1847743962f3b76cbe62445cbacef312 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
@@ -58,7 +58,7 @@ void GridGenerator::allocArrays_CoordNeighborGeo()
 	
 		cudaMemoryManager->cudaAllocCoord(level);
         cudaMemoryManager->cudaAllocSP(level);
-		para->cudaAllocF3SP(level);
+        //cudaMemoryManager->cudaAllocF3SP(level);
 		cudaMemoryManager->cudaAllocNeighborWSB(level);
 
         if(para->getUseWale())
@@ -102,9 +102,9 @@ void GridGenerator::allocArrays_BoundaryValues()
         para->getParD(level)->kPressQread = numberOfPressureValues * para->getD3Qxx();
         if (numberOfPressureValues > 1)
         {
-            para->cudaAllocPress(level);
+            cudaMemoryManager->cudaAllocPress(level);
             builder->getPressureValues(para->getParH(level)->QPress.RhoBC, para->getParH(level)->QPress.k, para->getParH(level)->QPress.kN, level);
-            para->cudaCopyPress(level);
+            cudaMemoryManager->cudaCopyPress(level);
         }
     }
     
@@ -127,7 +127,7 @@ void GridGenerator::allocArrays_BoundaryValues()
         if (numberOfVelocityValues > 1)
         {
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            para->cudaAllocVeloBC(level);
+            cudaMemoryManager->cudaAllocVeloBC(level);
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
             builder->getVelocityValues(para->getParH(level)->Qinflow.Vx, para->getParH(level)->Qinflow.Vy, para->getParH(level)->Qinflow.Vz, para->getParH(level)->Qinflow.k, level);
@@ -146,7 +146,7 @@ void GridGenerator::allocArrays_BoundaryValues()
 
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-            para->cudaCopyVeloBC(level);
+            cudaMemoryManager->cudaCopyVeloBC(level);
 
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
             // advection - diffusion stuff
@@ -157,7 +157,7 @@ void GridGenerator::allocArrays_BoundaryValues()
             	std::cout << "getTemperatureInit = " << para->getTemperatureInit() << std::endl;
             	std::cout << "getTemperatureBC = " << para->getTemperatureBC() << std::endl;
             	//////////////////////////////////////////////////////////////////////////
-            	para->cudaAllocTempVeloBC(level);
+                cudaMemoryManager->cudaAllocTempVeloBC(level);
             	//cout << "nach alloc " << endl;
             	//////////////////////////////////////////////////////////////////////////
             	for (int m = 0; m < numberOfVelocityValues; m++)
@@ -169,7 +169,7 @@ void GridGenerator::allocArrays_BoundaryValues()
             	}
             	//////////////////////////////////////////////////////////////////////////
             	//cout << "vor copy " << endl;
-            	para->cudaCopyTempVeloBCHD(level);
+                cudaMemoryManager->cudaCopyTempVeloBCHD(level);
             	//cout << "nach copy " << endl;
             	//////////////////////////////////////////////////////////////////////////
             }
@@ -191,7 +191,7 @@ void GridGenerator::allocArrays_BoundaryValues()
             {
 
                 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                para->cudaAllocGeomValuesBC(i);
+                cudaMemoryManager->cudaAllocGeomValuesBC(i);
                 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                 //Indexarray
 
@@ -219,7 +219,7 @@ void GridGenerator::allocArrays_BoundaryValues()
                 //	para->getParH(i)->QGeom.Vz[m] = 0.0f;
                 //}
                 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                para->cudaCopyGeomValuesBC(i);
+                cudaMemoryManager->cudaCopyGeomValuesBC(i);
                 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                 //// advection - diffusion stuff
                 //if (para->getDiffOn()==true){
@@ -671,7 +671,7 @@ void GridGenerator::allocArrays_BoundaryQs()
                 para->getParD(i)->TempPress.kTemp = numberOfPressureValues;
                 std::cout << "Groesse TempPress.kTemp = " << para->getParH(i)->TempPress.kTemp << std::endl;
                 //////////////////////////////////////////////////////////////////////////
-                para->cudaAllocTempPressBC(i);
+                cudaMemoryManager->cudaAllocTempPressBC(i);
                 //cout << "nach alloc" << endl;
                 //////////////////////////////////////////////////////////////////////////
                 for (int m = 0; m < numberOfPressureValues; m++)
@@ -682,12 +682,12 @@ void GridGenerator::allocArrays_BoundaryQs()
                 }
                 //////////////////////////////////////////////////////////////////////////
                 //cout << "vor copy" << endl;
-                para->cudaCopyTempPressBCHD(i);
+                cudaMemoryManager->cudaCopyTempPressBCHD(i);
                 //cout << "nach copy" << endl;
                 //////////////////////////////////////////////////////////////////////////
             }
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            para->cudaCopyPress(i);
+            cudaMemoryManager->cudaCopyPress(i);
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         }//ende if
     }//ende oberste for schleife
@@ -743,7 +743,7 @@ void GridGenerator::allocArrays_BoundaryQs()
                 std::cout << "getTemperatureInit = " << para->getTemperatureInit() << std::endl;
                 std::cout << "getTemperatureBC = " << para->getTemperatureBC() << std::endl;
                 //////////////////////////////////////////////////////////////////////////
-                para->cudaAllocTempVeloBC(i);
+                cudaMemoryManager->cudaAllocTempVeloBC(i);
                 //cout << "nach alloc " << std::endl;
                 //////////////////////////////////////////////////////////////////////////
                 for (int m = 0; m < numberOfVelocityNodes; m++)
@@ -755,11 +755,11 @@ void GridGenerator::allocArrays_BoundaryQs()
                 }
                 //////////////////////////////////////////////////////////////////////////
                 //cout << "vor copy " << std::endl;
-                para->cudaCopyTempVeloBCHD(i);
+                cudaMemoryManager->cudaCopyTempVeloBCHD(i);
                 //cout << "nach copy " << std::endl;
                 //////////////////////////////////////////////////////////////////////////
             }
-            para->cudaCopyVeloBC(i);
+            cudaMemoryManager->cudaCopyVeloBC(i);
         }
     }
 
@@ -777,7 +777,7 @@ void GridGenerator::allocArrays_BoundaryQs()
             //para->getParH(i)->QGeom.kQ = temp4;
             //para->getParD(i)->QGeom.kQ = para->getParH(i)->QGeom.kQ;
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            para->cudaAllocGeomBC(i);
+            cudaMemoryManager->cudaAllocGeomBC(i);
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
             //////////////////////////////////////////////////////////////////////////
@@ -840,7 +840,7 @@ void GridGenerator::allocArrays_BoundaryQs()
                     para->getParD(i)->Temp.kTemp = numberOfGeometryNodes;
                     std::cout << "Groesse Temp.kTemp = " << para->getParH(i)->Temp.kTemp << std::endl;
                     //////////////////////////////////////////////////////////////////////////
-                    para->cudaAllocTempNoSlipBC(i);
+                    cudaMemoryManager->cudaAllocTempNoSlipBC(i);
                     //////////////////////////////////////////////////////////////////////////
                     for (int m = 0; m < numberOfGeometryNodes; m++)
                     {
@@ -848,11 +848,11 @@ void GridGenerator::allocArrays_BoundaryQs()
                         para->getParH(i)->Temp.k[m] = para->getParH(i)->QGeom.k[m];
                     }
                     //////////////////////////////////////////////////////////////////////////
-                    para->cudaCopyTempNoSlipBCHD(i);
+                    cudaMemoryManager->cudaCopyTempNoSlipBCHD(i);
                     //////////////////////////////////////////////////////////////////////////
                 }
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            para->cudaCopyGeomBC(i);
+                cudaMemoryManager->cudaCopyGeomBC(i);
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         }
     }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp b/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp
index bc414530f64193223e63e673412c67bfc6aef745..6c1585bd689a5f2e2da603d5e9fdb81cbc175aab 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp
+++ b/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp
@@ -248,7 +248,7 @@ void CudaMemoryManager::cudaAllocOutflowBC(int lev)
 	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->Qoutflow.RhoBC),                  mem_size_outflow_Q_q ));
 
 	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_outflow_Q_k + 2. * (double)mem_size_outflow_Q_q + (double)parameter->getD3Qxx()*(double)mem_size_outflow_Q_q;
+	double tmp = (double)mem_size_outflow_Q_q + 2. * (double)mem_size_outflow_Q_k + (double)parameter->getD3Qxx()*(double)mem_size_outflow_Q_q;
 	setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyOutflowBC(int lev)
@@ -387,7 +387,7 @@ void CudaMemoryManager::cudaAllocForcing()
 	//Device
 	checkCudaErrors( cudaMalloc((void**) &parameter->forcingD, mem_size));
 	//////////////////////////////////////////////////////////////////////////
-	double tmp = (real)mem_size;
+	double tmp = (double)mem_size;
 	setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyForcingToDevice()
@@ -416,7 +416,7 @@ void CudaMemoryManager::cudaAllocQuadricLimiters()
 	//Device
 	checkCudaErrors( cudaMalloc((void**) &parameter->quadricLimitersD, mem_size));
 	//////////////////////////////////////////////////////////////////////////
-	double tmp = (real)mem_size;
+	double tmp = (double)mem_size;
 	setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyQuadricLimitersToDevice()
@@ -436,15 +436,15 @@ void CudaMemoryManager::cudaFreeQuadricLimiters()
 void CudaMemoryManager::cudaAllocProcessNeighborX(int lev, unsigned int processNeighbor)
 {
 	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborX[processNeighbor].index ),                  parameter->getParH(lev)->sendProcessNeighborX[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborX[processNeighbor].index ),                             parameter->getParH(lev)->sendProcessNeighborX[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborX[processNeighbor].f[0]  ),     parameter->getD3Qxx() * parameter->getParH(lev)->sendProcessNeighborX[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborX[processNeighbor].index ),                  parameter->getParH(lev)->recvProcessNeighborX[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborX[processNeighbor].index ),                             parameter->getParH(lev)->recvProcessNeighborX[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborX[processNeighbor].f[0]  ),     parameter->getD3Qxx() * parameter->getParH(lev)->recvProcessNeighborX[processNeighbor].memsizeFs    ));
 
 	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborX[processNeighbor].index ),                      parameter->getParD(lev)->sendProcessNeighborX[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborX[processNeighbor].index ),                                 parameter->getParD(lev)->sendProcessNeighborX[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborX[processNeighbor].f[0]  ),         parameter->getD3Qxx() * parameter->getParD(lev)->sendProcessNeighborX[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborX[processNeighbor].index ),                      parameter->getParD(lev)->recvProcessNeighborX[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborX[processNeighbor].index ),                                 parameter->getParD(lev)->recvProcessNeighborX[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborX[processNeighbor].f[0]  ),         parameter->getD3Qxx() * parameter->getParD(lev)->recvProcessNeighborX[processNeighbor].memsizeFs    ));
 
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -491,15 +491,15 @@ void CudaMemoryManager::cudaFreeProcessNeighborX(int lev, unsigned int processNe
 void CudaMemoryManager::cudaAllocProcessNeighborY(int lev, unsigned int processNeighbor)
 {
 	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborY[processNeighbor].index ),                  parameter->getParH(lev)->sendProcessNeighborY[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborY[processNeighbor].index ),                             parameter->getParH(lev)->sendProcessNeighborY[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborY[processNeighbor].f[0]  ),     parameter->getD3Qxx() * parameter->getParH(lev)->sendProcessNeighborY[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborY[processNeighbor].index ),                  parameter->getParH(lev)->recvProcessNeighborY[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborY[processNeighbor].index ),                             parameter->getParH(lev)->recvProcessNeighborY[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborY[processNeighbor].f[0]  ),     parameter->getD3Qxx() * parameter->getParH(lev)->recvProcessNeighborY[processNeighbor].memsizeFs    ));
 
 	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborY[processNeighbor].index ),                      parameter->getParD(lev)->sendProcessNeighborY[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborY[processNeighbor].index ),                                 parameter->getParD(lev)->sendProcessNeighborY[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborY[processNeighbor].f[0]  ),         parameter->getD3Qxx() * parameter->getParD(lev)->sendProcessNeighborY[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborY[processNeighbor].index ),                      parameter->getParD(lev)->recvProcessNeighborY[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborY[processNeighbor].index ),                                 parameter->getParD(lev)->recvProcessNeighborY[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborY[processNeighbor].f[0]  ),         parameter->getD3Qxx() * parameter->getParD(lev)->recvProcessNeighborY[processNeighbor].memsizeFs    ));
 
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -546,15 +546,15 @@ void CudaMemoryManager::cudaFreeProcessNeighborY(int lev, unsigned int processNe
 void CudaMemoryManager::cudaAllocProcessNeighborZ(int lev, unsigned int processNeighbor)
 {
 	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborZ[processNeighbor].index ),                  parameter->getParH(lev)->sendProcessNeighborZ[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborZ[processNeighbor].index ),                             parameter->getParH(lev)->sendProcessNeighborZ[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborZ[processNeighbor].f[0]  ),     parameter->getD3Qxx() * parameter->getParH(lev)->sendProcessNeighborZ[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborZ[processNeighbor].index ),                  parameter->getParH(lev)->recvProcessNeighborZ[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborZ[processNeighbor].index ),                             parameter->getParH(lev)->recvProcessNeighborZ[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborZ[processNeighbor].f[0]  ),     parameter->getD3Qxx() * parameter->getParH(lev)->recvProcessNeighborZ[processNeighbor].memsizeFs    ));
 
 	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborZ[processNeighbor].index ),                      parameter->getParD(lev)->sendProcessNeighborZ[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborZ[processNeighbor].index ),                                 parameter->getParD(lev)->sendProcessNeighborZ[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborZ[processNeighbor].f[0]  ),         parameter->getD3Qxx() * parameter->getParD(lev)->sendProcessNeighborZ[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborZ[processNeighbor].index ),                      parameter->getParD(lev)->recvProcessNeighborZ[processNeighbor].memsizeIndex ));
+	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborZ[processNeighbor].index ),                                 parameter->getParD(lev)->recvProcessNeighborZ[processNeighbor].memsizeIndex ));
 	checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborZ[processNeighbor].f[0]  ),         parameter->getD3Qxx() * parameter->getParD(lev)->recvProcessNeighborZ[processNeighbor].memsizeFs    ));
 
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -831,7 +831,7 @@ void CudaMemoryManager::cudaAllocTurbulentViscosity(int lev)
     checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDyvz), parameter->getParD(lev)->mem_size_real_SP));
     checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDzvz), parameter->getParD(lev)->mem_size_real_SP));
     //////////////////////////////////////////////////////////////////////////
-    double tmp = (double)parameter->getParH(lev)->mem_size_real_SP;
+    double tmp = (double)parameter->getParH(lev)->mem_size_real_SP * 12.0;
     setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyTurbulentViscosityHD(int lev)
@@ -1166,19 +1166,19 @@ void CudaMemoryManager::cudaAllocGeomNormals(int lev)
     
     //Host
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QGeomNormalX.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QGeomNormalX.k),                 mem_size_Q_k      ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QGeomNormalX.k),                            mem_size_Q_k      ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QGeomNormalY.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QGeomNormalY.k),                 mem_size_Q_k      ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QGeomNormalY.k),                            mem_size_Q_k      ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QGeomNormalZ.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QGeomNormalZ.k),                 mem_size_Q_k      ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QGeomNormalZ.k),                            mem_size_Q_k      ));
     
     //Device
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QGeomNormalX.q27[0]),     parameter->getD3Qxx()* mem_size_Q_q     ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QGeomNormalX.k),                      mem_size_Q_k     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QGeomNormalX.k),                                 mem_size_Q_k     ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QGeomNormalY.q27[0]),     parameter->getD3Qxx()* mem_size_Q_q     ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QGeomNormalY.k),                      mem_size_Q_k     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QGeomNormalY.k),                                 mem_size_Q_k     ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QGeomNormalZ.q27[0]),     parameter->getD3Qxx()* mem_size_Q_q     ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QGeomNormalZ.k),                      mem_size_Q_k     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QGeomNormalZ.k),                                 mem_size_Q_k     ));
     
     //////////////////////////////////////////////////////////////////////////
     double tmp = 3.0 * (double)mem_size_Q_k + 3.0 * (double)parameter->getD3Qxx()*(double)mem_size_Q_q;
@@ -1213,19 +1213,19 @@ void CudaMemoryManager::cudaAllocInflowNormals(int lev)
     
     //Host
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QInflowNormalX.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QInflowNormalX.k),                 mem_size_Q_k      ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QInflowNormalX.k),                            mem_size_Q_k      ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QInflowNormalY.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QInflowNormalY.k),                 mem_size_Q_k      ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QInflowNormalY.k),                            mem_size_Q_k      ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QInflowNormalZ.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QInflowNormalZ.k),                 mem_size_Q_k      ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QInflowNormalZ.k),                            mem_size_Q_k      ));
     
     //Device
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QInflowNormalX.q27[0]),     parameter->getD3Qxx()* mem_size_Q_q     ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QInflowNormalX.k),                      mem_size_Q_k     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QInflowNormalX.k),                                 mem_size_Q_k     ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QInflowNormalY.q27[0]),     parameter->getD3Qxx()* mem_size_Q_q     ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QInflowNormalY.k),                      mem_size_Q_k     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QInflowNormalY.k),                                 mem_size_Q_k     ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QInflowNormalZ.q27[0]),     parameter->getD3Qxx()* mem_size_Q_q     ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QInflowNormalZ.k),                      mem_size_Q_k     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QInflowNormalZ.k),                                 mem_size_Q_k     ));
     
     //////////////////////////////////////////////////////////////////////////
     double tmp = 3.0 * (double)mem_size_Q_k + 3.0 * (double)parameter->getD3Qxx()*(double)mem_size_Q_q;
@@ -1260,19 +1260,19 @@ void CudaMemoryManager::cudaAllocOutflowNormals(int lev)
     
     //Host
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QOutflowNormalX.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QOutflowNormalX.k),                 mem_size_Q_k      ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QOutflowNormalX.k),                            mem_size_Q_k      ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QOutflowNormalY.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QOutflowNormalY.k),                 mem_size_Q_k      ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QOutflowNormalY.k),                            mem_size_Q_k      ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QOutflowNormalZ.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QOutflowNormalZ.k),                 mem_size_Q_k      ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QOutflowNormalZ.k),                            mem_size_Q_k      ));
     
     //Device
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QOutflowNormalX.q27[0]),     parameter->getD3Qxx()* mem_size_Q_q     ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QOutflowNormalX.k),                      mem_size_Q_k     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QOutflowNormalX.k),                                 mem_size_Q_k     ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QOutflowNormalY.q27[0]),     parameter->getD3Qxx()* mem_size_Q_q     ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QOutflowNormalY.k),                      mem_size_Q_k     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QOutflowNormalY.k),                                 mem_size_Q_k     ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QOutflowNormalZ.q27[0]),     parameter->getD3Qxx()* mem_size_Q_q     ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QOutflowNormalZ.k),                      mem_size_Q_k     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QOutflowNormalZ.k),                                 mem_size_Q_k     ));
     
     //////////////////////////////////////////////////////////////////////////
     double tmp = 3.0 * (double)mem_size_Q_k + 3.0 * (double)parameter->getD3Qxx()*(double)mem_size_Q_q;
@@ -1309,13 +1309,13 @@ void CudaMemoryManager::cudaAllocSlipBC(int lev)
     
     //Host
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QSlip.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QSlip.k),                 mem_size_Q_k      ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QSlip.k),                            mem_size_Q_k      ));
     //checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QSlip.qread),             mem_size_Q_q_read ));//Geller
     //checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->QSlip.valueQ),            mem_size_Q_value  ));//Geller
     
     //Device
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QSlip.q27[0]),     parameter->getD3Qxx()* mem_size_Q_q     ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QSlip.k),                      mem_size_Q_k     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->QSlip.k),                                 mem_size_Q_k     ));
     
     //////////////////////////////////////////////////////////////////////////
     double tmp = (double)mem_size_Q_k + (double)parameter->getD3Qxx()*(double)mem_size_Q_q;
@@ -1346,7 +1346,7 @@ void CudaMemoryManager::cudaAllocTestRE(int lev, unsigned int size)
     //Device
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->kDistTestRE.f[0]), (1+parameter->getD3Qxx())*mem_size));
     //////////////////////////////////////////////////////////////////////////
-    double tmp = (double)size;
+    double tmp = (double)((1. + parameter->getD3Qxx()) * mem_size);
     setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyTestREtoDevice(int lev, unsigned int size)
@@ -1552,18 +1552,18 @@ void CudaMemoryManager::cudaFreeVeloPropeller(int lev)
 void CudaMemoryManager::cudaAllocMeasurePointsIndex(int lev)
 {
     //Host
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->kMP),                        parameter->getParH(lev)->memSizeIntkMP     ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->kMP),                     parameter->getParH(lev)->memSizeIntkMP  ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->VxMP),                    parameter->getParH(lev)->memSizerealkMP ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->VyMP),                    parameter->getParH(lev)->memSizerealkMP ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->VzMP),                    parameter->getParH(lev)->memSizerealkMP ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->RhoMP),                    parameter->getParH(lev)->memSizerealkMP ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->RhoMP),                   parameter->getParH(lev)->memSizerealkMP ));
     
     //Device
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->kMP),                            parameter->getParD(lev)->memSizeIntkMP     ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->kMP),                         parameter->getParD(lev)->memSizeIntkMP  ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->VxMP),                        parameter->getParD(lev)->memSizerealkMP ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->VyMP),                        parameter->getParD(lev)->memSizerealkMP ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->VzMP),                        parameter->getParD(lev)->memSizerealkMP ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->RhoMP),                        parameter->getParD(lev)->memSizerealkMP ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->RhoMP),                       parameter->getParD(lev)->memSizerealkMP ));
     
     //////////////////////////////////////////////////////////////////////////
     double tmp = (double)parameter->getParH(lev)->memSizeIntkMP + 4. * (double)parameter->getParH(lev)->memSizerealkMP;
@@ -1615,17 +1615,17 @@ void CudaMemoryManager::cudaAllocDragLift(int lev, int numofelem)
     unsigned int mem_size = sizeof(double)*numofelem;
     
     //Host
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->DragPreX), mem_size  ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->DragPreY), mem_size  ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->DragPreZ), mem_size  ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->DragPreX),  mem_size  ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->DragPreY),  mem_size  ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->DragPreZ),  mem_size  ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->DragPostX), mem_size  ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->DragPostY), mem_size  ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->DragPostZ), mem_size  ));
     
     //Device
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->DragPreX), mem_size  ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->DragPreY), mem_size  ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->DragPreZ), mem_size  ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->DragPreX),  mem_size  ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->DragPreY),  mem_size  ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->DragPreZ),  mem_size  ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->DragPostX), mem_size  ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->DragPostY), mem_size  ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->DragPostZ), mem_size  ));
@@ -1674,7 +1674,7 @@ void CudaMemoryManager::cudaAlloc2ndMoments(int lev, int numofelem)
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->kxxMzzFromfcNEQ), mem_size  ));
     
     //////////////////////////////////////////////////////////////////////////
-    double tmp = 5. * (real)mem_size;
+    double tmp = 5. * (double)mem_size;
     setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopy2ndMoments(int lev, int numofelem)
@@ -1719,7 +1719,7 @@ void CudaMemoryManager::cudaAlloc3rdMoments(int lev, int numofelem)
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->CUMcab ), mem_size ));
     
     //////////////////////////////////////////////////////////////////////////
-    double tmp = 7. * (real)mem_size;
+    double tmp = 7. * (double)mem_size;
     setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopy3rdMoments(int lev, int numofelem)
@@ -1774,7 +1774,7 @@ void CudaMemoryManager::cudaAllocHigherMoments(int lev, int numofelem)
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->CUMccc ), mem_size ));
     
     //////////////////////////////////////////////////////////////////////////
-    double tmp = 7. * (real)mem_size;
+    double tmp = 10. * (double)mem_size;
     setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyHigherMoments(int lev, int numofelem)
@@ -1821,7 +1821,7 @@ void CudaMemoryManager::cudaAllocForceVelo(int lev, int numofelem)
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->VzForce   ), mem_size  ));
     
     //////////////////////////////////////////////////////////////////////////
-    double tmp = 3. * (real)mem_size;
+    double tmp = 3. * (double)mem_size;
     setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyForceVelo(int lev, int numofelem)
@@ -1992,8 +1992,12 @@ void CudaMemoryManager::cudaAllocParticles(int lev)
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->plp.hot),                    parameter->getParD(lev)->plp.memSizeBoolBC      ));
     
     //////////////////////////////////////////////////////////////////////////
-    double tmp = (double)parameter->getParD(lev)->plp.memSizerealAll * (double)9.0 + (double)parameter->getParD(lev)->plp.memSizeID * (double)2.0 + (double)parameter->getParD(lev)->plp.memSizeTimestep
-    + (double)parameter->getParD(lev)->plp.memSizeBool + (double)parameter->getParD(lev)->plp.memSizeBoolBC;
+    double tmp = 
+        (double)parameter->getParD(lev)->plp.memSizerealAll * (double)9.0 + 
+        (double)parameter->getParD(lev)->plp.memSizeID *      (double)2.0 + 
+        (double)parameter->getParD(lev)->plp.memSizeTimestep              + 
+        (double)parameter->getParD(lev)->plp.memSizeBool                  + 
+        (double)parameter->getParD(lev)->plp.memSizeBoolBC;
     setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyParticles(int lev)
@@ -2033,6 +2037,9 @@ void CudaMemoryManager::cudaAllocRandomValues()
 {
     //Device
     checkCudaErrors( cudaMalloc((void**)(parameter->getRandomState()), (sizeof(curandState)*parameter->getParD(parameter->getFine())->plp.numberOfParticles) ));
+    //////////////////////////////////////////////////////////////////////////
+    double tmp = (double)(sizeof(curandState) * parameter->getParD(parameter->getFine())->plp.numberOfParticles);
+    setMemsizeGPU(tmp, false);
 }
 //////////////////////////////////////////////////////////////////////////
 //porous media
@@ -2078,6 +2085,9 @@ void CudaMemoryManager::cudaAllocConc(int lev)
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->Conc), parameter->getParH(lev)->mem_size_real_SP));
     //Device
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->Conc), parameter->getParD(lev)->mem_size_real_SP));
+    //////////////////////////////////////////////////////////////////////////
+    double tmp = (double)parameter->getParH(lev)->mem_size_real_SP;
+    setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyConcDH(int lev)
 {
@@ -2103,6 +2113,9 @@ void CudaMemoryManager::cudaAllocTempFs(int lev)
     {
         checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->d27.f[0]), parameter->getDiffMod()*parameter->getParH(lev)->mem_size_real_SP));
     }
+    //////////////////////////////////////////////////////////////////////////
+    double tmp = (double)(parameter->getDiffMod() * parameter->getParH(lev)->mem_size_real_SP);
+    setMemsizeGPU(tmp, false);
 }
 //////////////////////////////////////////////////////////////////////////
 void CudaMemoryManager::cudaAllocTempPressBC(int lev)
@@ -2119,7 +2132,9 @@ void CudaMemoryManager::cudaAllocTempPressBC(int lev)
     checkCudaErrors( cudaMalloc((void**) &parameter->getParD(lev)->TempPress.temp, mem_size_TempPress_q));
     checkCudaErrors( cudaMalloc((void**) &parameter->getParD(lev)->TempPress.velo, mem_size_TempPress_q));
     checkCudaErrors( cudaMalloc((void**) &parameter->getParD(lev)->TempPress.k,    mem_size_TempPress_k));
-    
+    //////////////////////////////////////////////////////////////////////////
+    double tmp = (double)(2.0 * mem_size_TempPress_q) + (double)(mem_size_TempPress_k);
+    setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyTempPressBCHD(int lev)
 {
@@ -2154,6 +2169,9 @@ void CudaMemoryManager::cudaAllocTempVeloBC(int lev)
     checkCudaErrors( cudaMalloc((void**) &parameter->getParD(lev)->TempVel.tempPulse, mem_size_TempVel_q));
     checkCudaErrors( cudaMalloc((void**) &parameter->getParD(lev)->TempVel.velo,      mem_size_TempVel_q));
     checkCudaErrors( cudaMalloc((void**) &parameter->getParD(lev)->TempVel.k,         mem_size_TempVel_k));
+    //////////////////////////////////////////////////////////////////////////
+    double tmp = (double)(3.0 * mem_size_TempVel_q) + (double)(mem_size_TempVel_k);
+    setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyTempVeloBCHD(int lev)
 {
@@ -2186,7 +2204,9 @@ void CudaMemoryManager::cudaAllocTempNoSlipBC(int lev)
     // Device Memory
     checkCudaErrors( cudaMalloc((void**) &parameter->getParD(lev)->Temp.temp, mem_size_Temp_q));
     checkCudaErrors( cudaMalloc((void**) &parameter->getParD(lev)->Temp.k,    mem_size_Temp_k));
-    
+    //////////////////////////////////////////////////////////////////////////
+    double tmp = (double)(mem_size_Temp_q) + (double)(mem_size_Temp_k);
+    setMemsizeGPU(tmp, false);
 }
 void CudaMemoryManager::cudaCopyTempNoSlipBCHD(int lev)
 {
@@ -2286,6 +2306,26 @@ void CudaMemoryManager::cudaFreeConcFile(int lev)
     checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->concIndex));
 }
 //////////////////////////////////////////////////////////////////////////
+void CudaMemoryManager::cudaAllocMedianOutAD(int lev)
+{
+	//Host
+	checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->rho_SP_Med_Out),   parameter->getParH(lev)->mem_size_real_SP));
+	checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->vx_SP_Med_Out),    parameter->getParH(lev)->mem_size_real_SP));
+	checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->vy_SP_Med_Out),    parameter->getParH(lev)->mem_size_real_SP));
+	checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->vz_SP_Med_Out),    parameter->getParH(lev)->mem_size_real_SP));
+	checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->press_SP_Med_Out), parameter->getParH(lev)->mem_size_real_SP));
+	checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->Conc_Med_Out),     parameter->getParH(lev)->mem_size_real_SP));
+}
+void CudaMemoryManager::cudaFreeMedianOutAD(int lev)
+{
+	checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->vx_SP_Med_Out));
+	checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->vy_SP_Med_Out));
+	checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->vz_SP_Med_Out));
+	checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->rho_SP_Med_Out));
+	checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->press_SP_Med_Out));
+	checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->Conc_Med_Out));
+}
+
 
 //////////////////////////////////////////////////////////////////////////
 //Process Neighbors
@@ -2293,20 +2333,23 @@ void CudaMemoryManager::cudaFreeConcFile(int lev)
 void CudaMemoryManager::cudaAllocProcessNeighbor(int lev, unsigned int processNeighbor)
 {
     //Host
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighbor[processNeighbor].index ),                  parameter->getParH(lev)->sendProcessNeighbor[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighbor[processNeighbor].index ),                             parameter->getParH(lev)->sendProcessNeighbor[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighbor[processNeighbor].f[0]  ),     parameter->getD3Qxx() * parameter->getParH(lev)->sendProcessNeighbor[processNeighbor].memsizeFs    ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighbor[processNeighbor].index ),                  parameter->getParH(lev)->recvProcessNeighbor[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighbor[processNeighbor].index ),                             parameter->getParH(lev)->recvProcessNeighbor[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighbor[processNeighbor].f[0]  ),     parameter->getD3Qxx() * parameter->getParH(lev)->recvProcessNeighbor[processNeighbor].memsizeFs    ));
     
     //Device
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighbor[processNeighbor].index ),                      parameter->getParD(lev)->sendProcessNeighbor[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighbor[processNeighbor].index ),                                 parameter->getParD(lev)->sendProcessNeighbor[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighbor[processNeighbor].f[0]  ),         parameter->getD3Qxx() * parameter->getParD(lev)->sendProcessNeighbor[processNeighbor].memsizeFs    ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighbor[processNeighbor].index ),                      parameter->getParD(lev)->recvProcessNeighbor[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighbor[processNeighbor].index ),                                 parameter->getParD(lev)->recvProcessNeighbor[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighbor[processNeighbor].f[0]  ),         parameter->getD3Qxx() * parameter->getParD(lev)->recvProcessNeighbor[processNeighbor].memsizeFs    ));
     
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    double tmp = (double)parameter->getParH(lev)->sendProcessNeighbor[processNeighbor].memsizeIndex + (double)parameter->getD3Qxx()*(double)parameter->getParH(lev)->sendProcessNeighbor[processNeighbor].memsizeFs +
-    (double)parameter->getParH(lev)->recvProcessNeighbor[processNeighbor].memsizeIndex + (double)parameter->getD3Qxx()*(double)parameter->getParH(lev)->recvProcessNeighbor[processNeighbor].memsizeFs;
+    double tmp = 
+        (double)parameter->getParH(lev)->sendProcessNeighbor[processNeighbor].memsizeIndex + 
+        (double)parameter->getD3Qxx()*(double)parameter->getParH(lev)->sendProcessNeighbor[processNeighbor].memsizeFs +
+        (double)parameter->getParH(lev)->recvProcessNeighbor[processNeighbor].memsizeIndex + 
+        (double)parameter->getD3Qxx()*(double)parameter->getParH(lev)->recvProcessNeighbor[processNeighbor].memsizeFs;
     setMemsizeGPU(tmp, false);
     //printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
 }
@@ -2363,8 +2406,11 @@ void CudaMemoryManager::cudaAllocProcessNeighborADX(int lev, unsigned int proces
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].f[0]  ),       parameter->getDiffMod() * parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs    ));
     
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    double tmp = (double)parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeIndex + (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeFs +
-    (double)parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeIndex + (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs;
+    double tmp = 
+        (double)parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeIndex + 
+        (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeFs +
+        (double)parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeIndex + 
+        (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs;
     setMemsizeGPU(tmp, false);
     //printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
 }
@@ -2406,20 +2452,23 @@ void CudaMemoryManager::cudaFreeProcessNeighborADX(int lev, unsigned int process
 void CudaMemoryManager::cudaAllocProcessNeighborADY(int lev, unsigned int processNeighbor)
 {
     //Host
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].index ),                  parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].index ),                             parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].f[0]  ),   parameter->getDiffMod() * parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs    ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].index ),                  parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].index ),                             parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].f[0]  ),   parameter->getDiffMod() * parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs    ));
     
     //Device
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].index ),                      parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].index ),                                 parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].f[0]  ),       parameter->getDiffMod() * parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs    ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].index ),                      parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].index ),                                 parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].f[0]  ),       parameter->getDiffMod() * parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs    ));
     
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    double tmp = (double)parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex + (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs +
-    (double)parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex + (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs;
+    double tmp = 
+        (double)parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex + 
+        (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs +
+        (double)parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex + 
+        (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs;
     setMemsizeGPU(tmp, false);
     //printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
 }
@@ -2461,20 +2510,23 @@ void CudaMemoryManager::cudaFreeProcessNeighborADY(int lev, unsigned int process
 void CudaMemoryManager::cudaAllocProcessNeighborADZ(int lev, unsigned int processNeighbor)
 {
     //Host
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].index ),                  parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].index ),                             parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].f[0]  ),   parameter->getDiffMod() * parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs    ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].index ),                  parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].index ),                             parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].f[0]  ),   parameter->getDiffMod() * parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs    ));
     
     //Device
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].index ),                      parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].index ),                                 parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].f[0]  ),       parameter->getDiffMod() * parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs    ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].index ),                      parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex ));
+    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].index ),                                 parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex ));
     checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].f[0]  ),       parameter->getDiffMod() * parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs    ));
     
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    double tmp = (double)parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex + (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs +
-    (double)parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex + (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs;
+    double tmp = 
+        (double)parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex + 
+        (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs +
+        (double)parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex + 
+        (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs;
     setMemsizeGPU(tmp, false);
     //printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h b/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
index f96b93ba39ed9c37efa7922373d91d30f0cb5eb8..c26db65afd384ac7a4e6c436c4dea2c46647ae95 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
+++ b/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
@@ -135,6 +135,9 @@ public:
     
     void cudaAllocMedianOut(int lev);
     void cudaFreeMedianOut(int lev);
+
+    void cudaAllocMedianOutAD(int lev);
+    void cudaFreeMedianOutAD(int lev);
     
     void cudaAllocInterfaceCF(int lev);
     void cudaCopyInterfaceCF(int lev);
diff --git a/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu b/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu
index 41bde987cb1b5f517c6303226966bfd5909702a2..a203cca15bfd0fccac53d1d86555a023063ea86a 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu
@@ -30,7 +30,7 @@ extern "C" void KernelCas27( unsigned int grid_nx,
    dim3 threads       ( grid_nx, 1, 1 );
    dim3 grid          ( grid_ny, grid_nz );   // Gitter fuer Kollision und Propagation
 
-      LB_Kernel_Casc27<< < grid, threads >>>( s9,
+      LB_Kernel_Casc27<<< grid, threads >>>( s9,
                                              bcMatD,
                                              neighborX,
                                              neighborY,
@@ -3324,21 +3324,21 @@ extern "C" void QVelDevCompZeroPress27(   unsigned int numberOfThreads,
 										  unsigned int size_Mat, 
 										  bool evenOrOdd)
 {
-   int Grid = kArray / numberOfThreads;
-   //int Grid = (kQ / numberOfThreads)+1;
-   //int Grid1, Grid2;
-   //if (Grid>512)
-   //{
-   //   Grid1 = 512;
-   //   Grid2 = (Grid/Grid1)+1;
-   //} 
-   //else
-   //{
-   //   Grid1 = 1;
-   //   Grid2 = Grid;
-   //}
-   //dim3 gridQ(Grid1, Grid2);
-   dim3 gridQ(Grid, 1, 1);
+   //int Grid = kArray / numberOfThreads;
+   int Grid = (sizeQ / numberOfThreads)+1;
+   int Grid1, Grid2;
+   if (Grid>512)
+   {
+      Grid1 = 512;
+      Grid2 = (Grid/Grid1)+1;
+   } 
+   else
+   {
+      Grid1 = 1;
+      Grid2 = Grid;
+   }
+   dim3 gridQ(Grid1, Grid2);
+   //dim3 gridQ(Grid, 1, 1);
    dim3 threads(numberOfThreads, 1, 1 );
 
       QVelDeviceCompZeroPress27<<< gridQ, threads >>> (   nx,
@@ -3357,7 +3357,7 @@ extern "C" void QVelDevCompZeroPress27(   unsigned int numberOfThreads,
 														  neighborZ,
 														  size_Mat, 
 														  evenOrOdd);
-      getLastCudaError("QVelDeviceComp27 execution failed"); 
+      getLastCudaError("QVelDeviceCompZeroPress27 execution failed"); 
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QVelDevIncompHighNu27(unsigned int numberOfThreads,
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
index 410cde34340c5ec139addb98b701abb97ec078ee..0446608cfc5d200efd21e95deac5a5eaf395d102 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
@@ -966,2402 +966,6 @@ void Parameter::copyMeasurePointsArrayToVector(int lev)
 
 
 
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//cuda-alloc-methods
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//full
-void Parameter::cudaAllocFull(int lev)
-{
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->geo      ), parH[lev]->mem_size_int  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->k        ), parH[lev]->mem_size_int  ));
-}
-void Parameter::cudaFreeFull(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->geo   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->k     ));
-}
-//coord
-void Parameter::cudaAllocCoord(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->coordX_SP      ), parH[lev]->mem_size_real_SP  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->coordY_SP      ), parH[lev]->mem_size_real_SP  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->coordZ_SP      ), parH[lev]->mem_size_real_SP  ));
-	//Device (spinning ship)
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->coordX_SP      ), parH[lev]->mem_size_real_SP  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->coordY_SP      ), parH[lev]->mem_size_real_SP  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->coordZ_SP      ), parH[lev]->mem_size_real_SP  ));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 3. * (double)parH[lev]->mem_size_real_SP;
-	setMemsizeGPU(tmp, false);
-	//printf("Coord = %f MB",tmp/1000000.);  
-}
-void Parameter::cudaCopyCoord(int lev)
-{
-	//copy host to device
-	checkCudaErrors( cudaMemcpy(parD[lev]->coordX_SP,  parH[lev]->coordX_SP,  parH[lev]->mem_size_real_SP     , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->coordY_SP,  parH[lev]->coordY_SP,  parH[lev]->mem_size_real_SP     , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->coordZ_SP,  parH[lev]->coordZ_SP,  parH[lev]->mem_size_real_SP     , cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeCoord(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->coordX_SP   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->coordY_SP   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->coordZ_SP   ));
-}
-//print
-void Parameter::cudaCopyPrint(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->vx_SP   , parD[lev]->vx_SP   , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->vy_SP   , parD[lev]->vy_SP   , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->vz_SP   , parD[lev]->vz_SP   , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->rho_SP  , parD[lev]->rho_SP  , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->press_SP, parD[lev]->press_SP, parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaCopyMedianPrint(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->vx_SP_Med   , parD[lev]->vx_SP_Med   , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->vy_SP_Med   , parD[lev]->vy_SP_Med   , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->vz_SP_Med   , parD[lev]->vz_SP_Med   , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->rho_SP_Med  , parD[lev]->rho_SP_Med  , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->press_SP_Med, parD[lev]->press_SP_Med, parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaCopyMedianADPrint(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->vx_SP_Med   , parD[lev]->vx_SP_Med   , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->vy_SP_Med   , parD[lev]->vy_SP_Med   , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->vz_SP_Med   , parD[lev]->vz_SP_Med   , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->rho_SP_Med  , parD[lev]->rho_SP_Med  , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->press_SP_Med, parD[lev]->press_SP_Med, parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->Conc_Med    , parD[lev]->Conc_Med    , parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-}
-//sparse
-void Parameter::cudaAllocSP(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->geoSP           ), parH[lev]->mem_size_int_SP    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->neighborX_SP    ), parH[lev]->mem_size_int_SP    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->neighborY_SP    ), parH[lev]->mem_size_int_SP    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->neighborZ_SP    ), parH[lev]->mem_size_int_SP    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->rho_SP          ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->vx_SP           ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->vy_SP           ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->vz_SP           ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->press_SP        ), parH[lev]->mem_size_real_SP));
-	//Device						 
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->geoSP               ), parD[lev]->mem_size_int_SP    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->neighborX_SP        ), parD[lev]->mem_size_int_SP    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->neighborY_SP        ), parD[lev]->mem_size_int_SP    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->neighborZ_SP        ), parD[lev]->mem_size_int_SP    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->rho_SP              ), parD[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->vx_SP               ), parD[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->vy_SP               ), parD[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->vz_SP               ), parD[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->press_SP            ), parD[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->d0SP.f[0]           ), (unsigned long long)getD3Qxx()*(unsigned long long)parD[lev]->mem_size_real_SP));
-	//////////////////////////////////////////////////////////////////////////
-	//double tmp = 4. * (double)parH[lev]->mem_size_int_SP + 10. * (double)parH[lev]->mem_size_real_SP + (double)getD3Qxx() * (double)parH[lev]->mem_size_real_SP;
-	double tmp = 4. * (double)parH[lev]->mem_size_int_SP + 5. * (double)parH[lev]->mem_size_real_SP + (double)getD3Qxx() * (double)parH[lev]->mem_size_real_SP;
-	setMemsizeGPU(tmp, false);
-
-	//int test = sizeof(int);
-	//printf("\n sizeof int = %d \n",test); 
-
-	//printf("AlocSP = %f MB \n",tmp/1000000.);  
-	//int test = sizeof(float*);
-	//printf("float* = %d \n",test); 
-	//unsigned long long test2 = (unsigned long long)getD3Qxx()*(unsigned long long)parD[lev]->mem_size_real_SP;
-	//test2 = test2 / 1000000000; 
-	//printf("test2 = %d \n",test2); 
-}
-void Parameter::cudaCopySP(int lev)
-{
-	//copy host to device
-	checkCudaErrors( cudaMemcpy(parD[lev]->geoSP       ,  parH[lev]->geoSP       ,  parH[lev]->mem_size_int_SP     , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->neighborX_SP,  parH[lev]->neighborX_SP,  parH[lev]->mem_size_int_SP     , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->neighborY_SP,  parH[lev]->neighborY_SP,  parH[lev]->mem_size_int_SP     , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->neighborZ_SP,  parH[lev]->neighborZ_SP,  parH[lev]->mem_size_int_SP     , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->rho_SP      ,  parH[lev]->rho_SP      ,  parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->vx_SP       ,  parH[lev]->vx_SP       ,  parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->vy_SP       ,  parH[lev]->vy_SP       ,  parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->vz_SP       ,  parH[lev]->vz_SP       ,  parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->press_SP    ,  parH[lev]->press_SP    ,  parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeSP(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->geoSP       ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->vx_SP       ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->vy_SP       ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->vz_SP       ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->rho_SP      ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->press_SP    ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->neighborX_SP));
-	checkCudaErrors( cudaFreeHost(parH[lev]->neighborY_SP));
-	checkCudaErrors( cudaFreeHost(parH[lev]->neighborZ_SP));
-}
-//F3
-void Parameter::cudaAllocF3SP(int lev)
-{
-	//Device						 
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->g6.g[0]), (unsigned long long)6*(unsigned long long)parD[lev]->mem_size_real_SP));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)6 * (double)parH[lev]->mem_size_real_SP;
-	setMemsizeGPU(tmp, false);
-}
-//negative neighbor (WSB)
-void Parameter::cudaAllocNeighborWSB(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->neighborWSB_SP    ), parH[lev]->mem_size_int_SP    ));
-	//Device						 
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->neighborWSB_SP        ), parD[lev]->mem_size_int_SP    ));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->mem_size_int_SP;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyNeighborWSB(int lev)
-{
-	//copy host to device
-	checkCudaErrors( cudaMemcpy(parD[lev]->neighborWSB_SP,  parH[lev]->neighborWSB_SP,  parH[lev]->mem_size_int_SP     , cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeNeighborWSB(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->neighborWSB_SP));
-}
-//turbulent viscosity
-void Parameter::cudaAllocTurbulentViscosity(int lev)
-{
-	//Host
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->turbViscosity), parH[lev]->mem_size_real_SP));
-	//Debug
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gSij ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gSDij), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gDxvx), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gDyvx), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gDzvx), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gDxvy), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gDyvy), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gDzvy), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gDxvz), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gDyvz), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->gDzvz), parH[lev]->mem_size_real_SP));
-
-	//Device						 
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->turbViscosity), parD[lev]->mem_size_real_SP));
-	//Debug
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gSij ), parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gSDij), parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gDxvx), parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gDyvx), parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gDzvx), parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gDxvy), parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gDyvy), parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gDzvy), parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gDxvz), parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gDyvz), parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->gDzvz), parD[lev]->mem_size_real_SP));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->mem_size_real_SP;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyTurbulentViscosityHD(int lev)
-{
-	//copy host to device
-	checkCudaErrors(cudaMemcpy(parD[lev]->turbViscosity, parH[lev]->turbViscosity, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	//Debug
-	checkCudaErrors(cudaMemcpy(parD[lev]->gSij , parH[lev]->gSij , parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->gSDij, parH[lev]->gSDij, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->gDxvx, parH[lev]->gDxvx, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->gDyvx, parH[lev]->gDyvx, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->gDzvx, parH[lev]->gDzvx, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->gDxvy, parH[lev]->gDxvy, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->gDyvy, parH[lev]->gDyvy, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->gDzvy, parH[lev]->gDzvy, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->gDxvz, parH[lev]->gDxvz, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->gDyvz, parH[lev]->gDyvz, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->gDzvz, parH[lev]->gDzvz, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyTurbulentViscosityDH(int lev)
-{
-	//copy device to host
-	checkCudaErrors(cudaMemcpy(parH[lev]->turbViscosity, parD[lev]->turbViscosity, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	//Debug
-	checkCudaErrors(cudaMemcpy(parH[lev]->gSij , parD[lev]->gSij , parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	checkCudaErrors(cudaMemcpy(parH[lev]->gSDij, parD[lev]->gSDij, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	checkCudaErrors(cudaMemcpy(parH[lev]->gDxvx, parD[lev]->gDxvx, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	checkCudaErrors(cudaMemcpy(parH[lev]->gDyvx, parD[lev]->gDyvx, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	checkCudaErrors(cudaMemcpy(parH[lev]->gDzvx, parD[lev]->gDzvx, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	checkCudaErrors(cudaMemcpy(parH[lev]->gDxvy, parD[lev]->gDxvy, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	checkCudaErrors(cudaMemcpy(parH[lev]->gDyvy, parD[lev]->gDyvy, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	checkCudaErrors(cudaMemcpy(parH[lev]->gDzvy, parD[lev]->gDzvy, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	checkCudaErrors(cudaMemcpy(parH[lev]->gDxvz, parD[lev]->gDxvz, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	checkCudaErrors(cudaMemcpy(parH[lev]->gDyvz, parD[lev]->gDyvz, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-	checkCudaErrors(cudaMemcpy(parH[lev]->gDzvz, parD[lev]->gDzvz, parH[lev]->mem_size_real_SP, cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeTurbulentViscosity(int lev)
-{
-	checkCudaErrors(cudaFreeHost(parH[lev]->turbViscosity));
-	//Debug
-	checkCudaErrors(cudaFreeHost(parH[lev]->gSij ));
-	checkCudaErrors(cudaFreeHost(parH[lev]->gSDij));
-	checkCudaErrors(cudaFreeHost(parH[lev]->gDxvx));
-	checkCudaErrors(cudaFreeHost(parH[lev]->gDyvx));
-	checkCudaErrors(cudaFreeHost(parH[lev]->gDzvx));
-	checkCudaErrors(cudaFreeHost(parH[lev]->gDxvy));
-	checkCudaErrors(cudaFreeHost(parH[lev]->gDyvy));
-	checkCudaErrors(cudaFreeHost(parH[lev]->gDzvy));
-	checkCudaErrors(cudaFreeHost(parH[lev]->gDxvz));
-	checkCudaErrors(cudaFreeHost(parH[lev]->gDyvz));
-	checkCudaErrors(cudaFreeHost(parH[lev]->gDzvz));
-}
-//median
-void Parameter::cudaAllocMedianSP(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->rho_SP_Med      ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->vx_SP_Med       ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->vy_SP_Med       ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->vz_SP_Med       ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->press_SP_Med    ), parH[lev]->mem_size_real_SP));
-	//Device						 
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->rho_SP_Med          ), parD[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->vx_SP_Med           ), parD[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->vy_SP_Med           ), parD[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->vz_SP_Med           ), parD[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->press_SP_Med        ), parD[lev]->mem_size_real_SP));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 5. * (double)parH[lev]->mem_size_real_SP;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyMedianSP(int lev)
-{
-	//copy host to device
-	checkCudaErrors( cudaMemcpy(parD[lev]->rho_SP_Med  ,  parH[lev]->rho_SP_Med  ,  parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->vx_SP_Med   ,  parH[lev]->vx_SP_Med   ,  parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->vy_SP_Med   ,  parH[lev]->vy_SP_Med   ,  parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->vz_SP_Med   ,  parH[lev]->vz_SP_Med   ,  parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->press_SP_Med,  parH[lev]->press_SP_Med,  parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeMedianSP(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->vx_SP_Med   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->vy_SP_Med   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->vz_SP_Med   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->rho_SP_Med  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->press_SP_Med));
-}
-void Parameter::cudaAllocMedianOut(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->rho_SP_Med_Out      ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->vx_SP_Med_Out       ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->vy_SP_Med_Out       ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->vz_SP_Med_Out       ), parH[lev]->mem_size_real_SP));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->press_SP_Med_Out    ), parH[lev]->mem_size_real_SP));
-}
-void Parameter::cudaFreeMedianOut(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->vx_SP_Med_Out   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->vy_SP_Med_Out   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->vz_SP_Med_Out   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->rho_SP_Med_Out  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->press_SP_Med_Out));
-}
-//median Advection-Diffusion
-void Parameter::cudaAllocMedianAD(int lev)
-{
-	//Host
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->rho_SP_Med),   parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->vx_SP_Med),    parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->vy_SP_Med),    parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->vz_SP_Med),    parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->press_SP_Med), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->Conc_Med),     parH[lev]->mem_size_real_SP));
-	//Device						 
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->rho_SP_Med),       parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->vx_SP_Med),        parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->vy_SP_Med),        parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->vz_SP_Med),        parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->press_SP_Med),     parD[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->Conc_Med),         parD[lev]->mem_size_real_SP));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 6. * (double)parH[lev]->mem_size_real_SP;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyMedianAD(int lev)
-{
-	//copy host to device
-	checkCudaErrors(cudaMemcpy(parD[lev]->rho_SP_Med,   parH[lev]->rho_SP_Med,   parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->vx_SP_Med,    parH[lev]->vx_SP_Med,    parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->vy_SP_Med,    parH[lev]->vy_SP_Med,    parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->vz_SP_Med,    parH[lev]->vz_SP_Med,    parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->press_SP_Med, parH[lev]->press_SP_Med, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->Conc_Med,     parH[lev]->Conc_Med,     parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeMedianAD(int lev)
-{
-	checkCudaErrors(cudaFreeHost(parH[lev]->vx_SP_Med));
-	checkCudaErrors(cudaFreeHost(parH[lev]->vy_SP_Med));
-	checkCudaErrors(cudaFreeHost(parH[lev]->vz_SP_Med));
-	checkCudaErrors(cudaFreeHost(parH[lev]->rho_SP_Med));
-	checkCudaErrors(cudaFreeHost(parH[lev]->press_SP_Med));
-	checkCudaErrors(cudaFreeHost(parH[lev]->Conc_Med));
-}
-void Parameter::cudaAllocMedianOutAD(int lev)
-{
-	//Host
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->rho_SP_Med_Out),   parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->vx_SP_Med_Out),    parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->vy_SP_Med_Out),    parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->vz_SP_Med_Out),    parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->press_SP_Med_Out), parH[lev]->mem_size_real_SP));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->Conc_Med_Out),     parH[lev]->mem_size_real_SP));
-}
-void Parameter::cudaFreeMedianOutAD(int lev)
-{
-	checkCudaErrors(cudaFreeHost(parH[lev]->vx_SP_Med_Out));
-	checkCudaErrors(cudaFreeHost(parH[lev]->vy_SP_Med_Out));
-	checkCudaErrors(cudaFreeHost(parH[lev]->vz_SP_Med_Out));
-	checkCudaErrors(cudaFreeHost(parH[lev]->rho_SP_Med_Out));
-	checkCudaErrors(cudaFreeHost(parH[lev]->press_SP_Med_Out));
-	checkCudaErrors(cudaFreeHost(parH[lev]->Conc_Med_Out));
-}
-
-//Interface CF
-void Parameter::cudaAllocInterfaceCF(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->intCF.ICellCFC), parH[lev]->mem_size_kCF  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->intCF.ICellCFF), parH[lev]->mem_size_kCF  ));
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->intCF.ICellCFC), parD[lev]->mem_size_kCF  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->intCF.ICellCFF), parD[lev]->mem_size_kCF  ));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 2. * (double)parH[lev]->mem_size_kCF;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyInterfaceCF(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->intCF.ICellCFC, parH[lev]->intCF.ICellCFC, parH[lev]->mem_size_kCF, cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->intCF.ICellCFF, parH[lev]->intCF.ICellCFF, parH[lev]->mem_size_kCF, cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeInterfaceCF(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->intCF.ICellCFC));
-	checkCudaErrors( cudaFreeHost(parH[lev]->intCF.ICellCFF));
-}
-//Interface FC
-void Parameter::cudaAllocInterfaceFC(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->intFC.ICellFCF), parH[lev]->mem_size_kFC  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->intFC.ICellFCC), parH[lev]->mem_size_kFC  ));
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->intFC.ICellFCF), parD[lev]->mem_size_kFC  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->intFC.ICellFCC), parD[lev]->mem_size_kFC  ));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 2. * (double)parH[lev]->mem_size_kFC;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyInterfaceFC(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->intFC.ICellFCF, parH[lev]->intFC.ICellFCF, parH[lev]->mem_size_kFC, cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->intFC.ICellFCC, parH[lev]->intFC.ICellFCC, parH[lev]->mem_size_kFC, cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeInterfaceFC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->intFC.ICellFCF));
-	checkCudaErrors( cudaFreeHost(parH[lev]->intFC.ICellFCC));
-}
-//Interface Offset CF
-void Parameter::cudaAllocInterfaceOffCF(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->offCF.xOffCF),   parH[lev]->mem_size_kCF_off  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->offCF.yOffCF),   parH[lev]->mem_size_kCF_off  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->offCF.zOffCF),   parH[lev]->mem_size_kCF_off  ));
-	getLastCudaError("Allocate host memory");
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->offCF.xOffCF),   parD[lev]->mem_size_kCF_off  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->offCF.yOffCF),   parD[lev]->mem_size_kCF_off  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->offCF.zOffCF),   parD[lev]->mem_size_kCF_off  ));
-	getLastCudaError("Allocate device memory");
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 3. * (double)parH[lev]->mem_size_kCF_off;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyInterfaceOffCF(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->offCF.xOffCF,   parH[lev]->offCF.xOffCF,   parH[lev]->mem_size_kCF_off, cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->offCF.yOffCF,   parH[lev]->offCF.yOffCF,   parH[lev]->mem_size_kCF_off, cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->offCF.zOffCF,   parH[lev]->offCF.zOffCF,   parH[lev]->mem_size_kCF_off, cudaMemcpyHostToDevice));
-	getLastCudaError("Copy host memory to device");
-}
-void Parameter::cudaFreeInterfaceOffCF(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->offCF.xOffCF));
-	checkCudaErrors( cudaFreeHost(parH[lev]->offCF.yOffCF));
-	checkCudaErrors( cudaFreeHost(parH[lev]->offCF.zOffCF));
-}
-//Interface Offset FC
-void Parameter::cudaAllocInterfaceOffFC(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->offFC.xOffFC),   parH[lev]->mem_size_kFC_off  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->offFC.yOffFC),   parH[lev]->mem_size_kFC_off  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->offFC.zOffFC),   parH[lev]->mem_size_kFC_off  ));
-	getLastCudaError("Allocate host memory");
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->offFC.xOffFC),   parD[lev]->mem_size_kFC_off  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->offFC.yOffFC),   parD[lev]->mem_size_kFC_off  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->offFC.zOffFC),   parD[lev]->mem_size_kFC_off  ));
-	getLastCudaError("Allocate device memory");
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 3. * (double)parH[lev]->mem_size_kFC_off;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyInterfaceOffFC(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->offFC.xOffFC,   parH[lev]->offFC.xOffFC,   parH[lev]->mem_size_kFC_off, cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->offFC.yOffFC,   parH[lev]->offFC.yOffFC,   parH[lev]->mem_size_kFC_off, cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->offFC.zOffFC,   parH[lev]->offFC.zOffFC,   parH[lev]->mem_size_kFC_off, cudaMemcpyHostToDevice));
-	getLastCudaError("Copy host memory to device");
-}
-void Parameter::cudaFreeInterfaceOffFC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->offFC.xOffFC));
-	checkCudaErrors( cudaFreeHost(parH[lev]->offFC.yOffFC));
-	checkCudaErrors( cudaFreeHost(parH[lev]->offFC.zOffFC));
-}
-
-//Velo
-void Parameter::cudaAllocVeloBC(int lev)
-{
-	unsigned int mem_size_inflow_Q_k = sizeof(int)*parH[lev]->Qinflow.kArray;
-	unsigned int mem_size_inflow_Q_q = sizeof(real)*parH[lev]->Qinflow.kArray;
-	//unsigned int mem_size_inflow_Q_k = sizeof(int)*parH[lev]->Qinflow.kQ;
-	//unsigned int mem_size_inflow_Q_q = sizeof(real)*parH[lev]->Qinflow.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qinflow.q27[0]),  getD3Qxx()*mem_size_inflow_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qinflow.k),                  mem_size_inflow_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qinflow.Vx),                 mem_size_inflow_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qinflow.Vy),                 mem_size_inflow_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qinflow.Vz),                 mem_size_inflow_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qinflow.deltaVz),            mem_size_inflow_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qinflow.RhoBC),              mem_size_inflow_Q_q ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Qinflow.q27[0]),      getD3Qxx()*mem_size_inflow_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Qinflow.k),                      mem_size_inflow_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Qinflow.Vx),                     mem_size_inflow_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Qinflow.Vy),                     mem_size_inflow_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Qinflow.Vz),                     mem_size_inflow_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Qinflow.deltaVz),                mem_size_inflow_Q_q ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_inflow_Q_k + 4. * (double)mem_size_inflow_Q_q + (double)getD3Qxx() * (double)mem_size_inflow_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyVeloBC(int lev)
-{
-	unsigned int mem_size_inflow_Q_k = sizeof(int)*parH[lev]->Qinflow.kArray;
-	unsigned int mem_size_inflow_Q_q = sizeof(real)*parH[lev]->Qinflow.kArray;
-	//unsigned int mem_size_inflow_Q_k = sizeof(int)*parH[lev]->Qinflow.kQ;
-	//unsigned int mem_size_inflow_Q_q = sizeof(real)*parH[lev]->Qinflow.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->Qinflow.q27[0],  parH[lev]->Qinflow.q27[0], getD3Qxx()* mem_size_inflow_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->Qinflow.k,       parH[lev]->Qinflow.k,                  mem_size_inflow_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->Qinflow.Vx,      parH[lev]->Qinflow.Vx,                 mem_size_inflow_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->Qinflow.Vy,      parH[lev]->Qinflow.Vy,                 mem_size_inflow_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->Qinflow.Vz,      parH[lev]->Qinflow.Vz,                 mem_size_inflow_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->Qinflow.deltaVz, parH[lev]->Qinflow.deltaVz,            mem_size_inflow_Q_q,  cudaMemcpyHostToDevice));
-
-}
-void Parameter::cudaFreeVeloBC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->Qinflow.q27[0] ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->Qinflow.k      ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->Qinflow.Vx     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->Qinflow.Vy     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->Qinflow.Vz     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->Qinflow.deltaVz));
-}
-//Press
-void Parameter::cudaAllocOutflowBC(int lev)
-{
-	unsigned int mem_size_outflow_Q_k = sizeof(int)*parH[lev]->Qoutflow.kQ;
-	unsigned int mem_size_outflow_Q_q = sizeof(real)*parH[lev]->Qoutflow.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qoutflow.q27[0]), getD3Qxx()*mem_size_outflow_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qoutflow.k),                 mem_size_outflow_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qoutflow.kN),                mem_size_outflow_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Qoutflow.RhoBC),             mem_size_outflow_Q_q ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Qoutflow.q27[0]),     getD3Qxx()* mem_size_outflow_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Qoutflow.k),                      mem_size_outflow_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Qoutflow.kN),                     mem_size_outflow_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Qoutflow.RhoBC),                  mem_size_outflow_Q_q ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_outflow_Q_k + 2. * (double)mem_size_outflow_Q_q + (double)getD3Qxx()*(double)mem_size_outflow_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyOutflowBC(int lev)
-{
-	unsigned int mem_size_outflow_Q_k = sizeof(int)*parH[lev]->Qoutflow.kQ;
-	unsigned int mem_size_outflow_Q_q = sizeof(real)*parH[lev]->Qoutflow.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->Qoutflow.q27[0],  parH[lev]->Qoutflow.q27[0], getD3Qxx()* mem_size_outflow_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->Qoutflow.k,       parH[lev]->Qoutflow.k,                  mem_size_outflow_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->Qoutflow.kN,      parH[lev]->Qoutflow.kN,                 mem_size_outflow_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->Qoutflow.RhoBC,   parH[lev]->Qoutflow.RhoBC,              mem_size_outflow_Q_q,  cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeOutflowBC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->Qoutflow.q27[0] ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->Qoutflow.k      ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->Qoutflow.kN     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->Qoutflow.RhoBC  ));
-}
-//Inlet
-void Parameter::cudaAllocInlet(int lev)
-{
-	unsigned int mem_size_inlet_Q_k = sizeof(int)*parH[lev]->QInlet.kQ;
-	unsigned int mem_size_inlet_Q_q = sizeof(real)*parH[lev]->QInlet.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QInlet.q27[0]), getD3Qxx()*mem_size_inlet_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QInlet.k),                 mem_size_inlet_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QInlet.kN),                mem_size_inlet_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QInlet.RhoBC),             mem_size_inlet_Q_q ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QInlet.q27[0]),     getD3Qxx()* mem_size_inlet_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QInlet.k),                      mem_size_inlet_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QInlet.kN),                     mem_size_inlet_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QInlet.RhoBC),                  mem_size_inlet_Q_q ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 2. * (double)mem_size_inlet_Q_k + (double)mem_size_inlet_Q_q + (double)getD3Qxx()*(double)mem_size_inlet_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyInlet(int lev)
-{
-	unsigned int mem_size_inlet_Q_k = sizeof(int)*parH[lev]->QInlet.kQ;
-	unsigned int mem_size_inlet_Q_q = sizeof(real)*parH[lev]->QInlet.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QInlet.q27[0],  parH[lev]->QInlet.q27[0], getD3Qxx()* mem_size_inlet_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QInlet.k,       parH[lev]->QInlet.k,                  mem_size_inlet_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QInlet.kN,      parH[lev]->QInlet.kN,                 mem_size_inlet_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QInlet.RhoBC,   parH[lev]->QInlet.RhoBC,              mem_size_inlet_Q_q,  cudaMemcpyHostToDevice));
-}																  
-void Parameter::cudaFreeInlet(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QInlet.q27[0] ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QInlet.k      ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QInlet.kN     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QInlet.RhoBC  ));
-}
-//Outlet
-void Parameter::cudaAllocOutlet(int lev)
-{
-	unsigned int mem_size_outlet_Q_k = sizeof(int)*parH[lev]->QOutlet.kQ;
-	unsigned int mem_size_outlet_Q_q = sizeof(real)*parH[lev]->QOutlet.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QOutlet.q27[0]), getD3Qxx()*mem_size_outlet_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QOutlet.k),                 mem_size_outlet_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QOutlet.kN),                mem_size_outlet_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QOutlet.RhoBC),             mem_size_outlet_Q_q ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QOutlet.q27[0]),     getD3Qxx()* mem_size_outlet_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QOutlet.k),                      mem_size_outlet_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QOutlet.kN),                     mem_size_outlet_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QOutlet.RhoBC),                  mem_size_outlet_Q_q ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 2. * (double)mem_size_outlet_Q_k + (double)mem_size_outlet_Q_q + (double)getD3Qxx()*(double)mem_size_outlet_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyOutlet(int lev)
-{
-	unsigned int mem_size_outlet_Q_k = sizeof(int)*parH[lev]->QOutlet.kQ;
-	unsigned int mem_size_outlet_Q_q = sizeof(real)*parH[lev]->QOutlet.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QOutlet.q27[0],  parH[lev]->QOutlet.q27[0], getD3Qxx()* mem_size_outlet_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QOutlet.k,       parH[lev]->QOutlet.k,                  mem_size_outlet_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QOutlet.kN,      parH[lev]->QOutlet.kN,                 mem_size_outlet_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QOutlet.RhoBC,   parH[lev]->QOutlet.RhoBC,              mem_size_outlet_Q_q,  cudaMemcpyHostToDevice));
-}																  
-void Parameter::cudaFreeOutlet(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QOutlet.q27[0] ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QOutlet.k      ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QOutlet.kN     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QOutlet.RhoBC  ));
-}
-//Wall
-void Parameter::cudaAllocWallBC(int lev)
-{
-	unsigned int mem_size_Q_k      = sizeof(int)*parH[lev]->QWall.kQ;
-	unsigned int mem_size_Q_q      = sizeof(real)*parH[lev]->QWall.kQ;
-	unsigned int mem_size_Q_value  = sizeof(long long)*parH[lev]->QWall.kQ; //Geller
-	unsigned int mem_size_Q_q_read = sizeof(real)*parH[lev]->kQread;     //Geller
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QWall.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QWall.k),                 mem_size_Q_k      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QWall.qread),             mem_size_Q_q_read ));//Geller
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QWall.valueQ),            mem_size_Q_value  ));//Geller
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QWall.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QWall.k),                      mem_size_Q_k     ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_Q_k + (double)getD3Qxx()*(double)mem_size_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyWallBC(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QWall.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QWall.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QWall.q27[0], parH[lev]->QWall.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QWall.k,      parH[lev]->QWall.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeWallBC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QWall.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QWall.k));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QWall.valueQ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QWall.qread));
-}
-//Geometrie
-void Parameter::cudaAllocGeomBC(int lev)
-{
-	unsigned int mem_size_Q_k      = sizeof(int)*parH[lev]->QGeom.kQ;
-	unsigned int mem_size_Q_q      = sizeof(real)*parH[lev]->QGeom.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeom.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeom.k),                 mem_size_Q_k      ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeom.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeom.k),                      mem_size_Q_k     ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_Q_k + (double)getD3Qxx()*(double)mem_size_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyGeomBC(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QGeom.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QGeom.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeom.q27[0], parH[lev]->QGeom.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeom.k,      parH[lev]->QGeom.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeGeomBC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeom.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeom.k));
-}
-//Geometrie inkl. Values
-void Parameter::cudaAllocGeomValuesBC(int lev)
-{
-	unsigned int mem_size_Q_q      = sizeof(real)*parH[lev]->QGeom.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeom.Vx),  mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeom.Vy),  mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeom.Vz),  mem_size_Q_q ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeom.Vx),      mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeom.Vy),      mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeom.Vz),      mem_size_Q_q ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 3. * (double)mem_size_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyGeomValuesBC(int lev)
-{
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QGeom.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeom.Vx, parH[lev]->QGeom.Vx,  mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeom.Vy, parH[lev]->QGeom.Vy,  mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeom.Vz, parH[lev]->QGeom.Vz,  mem_size_Q_q,       cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeGeomValuesBC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeom.Vx));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeom.Vy));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeom.Vz));
-}
-//Geometrie inkl. Normale fuer Slip
-void Parameter::cudaAllocGeomNormals(int lev)
-{
-	unsigned int mem_size_Q_k      = sizeof(int)*parH[lev]->QGeomNormalX.kQ;
-	unsigned int mem_size_Q_q      = sizeof(real)*parH[lev]->QGeomNormalX.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeomNormalX.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeomNormalX.k),                 mem_size_Q_k      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeomNormalY.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeomNormalY.k),                 mem_size_Q_k      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeomNormalZ.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QGeomNormalZ.k),                 mem_size_Q_k      ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeomNormalX.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeomNormalX.k),                      mem_size_Q_k     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeomNormalY.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeomNormalY.k),                      mem_size_Q_k     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeomNormalZ.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QGeomNormalZ.k),                      mem_size_Q_k     ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 3.0 * (double)mem_size_Q_k + 3.0 * (double)getD3Qxx()*(double)mem_size_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyGeomNormals(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QGeomNormalX.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QGeomNormalX.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeomNormalX.q27[0], parH[lev]->QGeomNormalX.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeomNormalX.k,      parH[lev]->QGeomNormalX.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeomNormalY.q27[0], parH[lev]->QGeomNormalY.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeomNormalY.k,      parH[lev]->QGeomNormalY.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeomNormalZ.q27[0], parH[lev]->QGeomNormalZ.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QGeomNormalZ.k,      parH[lev]->QGeomNormalZ.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeGeomNormals(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeomNormalX.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeomNormalX.k));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeomNormalY.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeomNormalY.k));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeomNormalZ.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QGeomNormalZ.k));
-}
-//Geometrie inkl. Normale fuer Inflow
-void Parameter::cudaAllocInflowNormals(int lev)
-{
-	unsigned int mem_size_Q_k      = sizeof(int)*parH[lev]->QInflowNormalX.kQ;
-	unsigned int mem_size_Q_q      = sizeof(real)*parH[lev]->QInflowNormalX.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QInflowNormalX.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QInflowNormalX.k),                 mem_size_Q_k      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QInflowNormalY.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QInflowNormalY.k),                 mem_size_Q_k      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QInflowNormalZ.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QInflowNormalZ.k),                 mem_size_Q_k      ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QInflowNormalX.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QInflowNormalX.k),                      mem_size_Q_k     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QInflowNormalY.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QInflowNormalY.k),                      mem_size_Q_k     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QInflowNormalZ.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QInflowNormalZ.k),                      mem_size_Q_k     ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 3.0 * (double)mem_size_Q_k + 3.0 * (double)getD3Qxx()*(double)mem_size_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyInflowNormals(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QInflowNormalX.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QInflowNormalX.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QInflowNormalX.q27[0], parH[lev]->QInflowNormalX.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QInflowNormalX.k,      parH[lev]->QInflowNormalX.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QInflowNormalY.q27[0], parH[lev]->QInflowNormalY.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QInflowNormalY.k,      parH[lev]->QInflowNormalY.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QInflowNormalZ.q27[0], parH[lev]->QInflowNormalZ.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QInflowNormalZ.k,      parH[lev]->QInflowNormalZ.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeInflowNormals(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QInflowNormalX.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QInflowNormalX.k));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QInflowNormalY.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QInflowNormalY.k));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QInflowNormalZ.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QInflowNormalZ.k));
-}
-//Geometrie inkl. Normale fuer Outflow
-void Parameter::cudaAllocOutflowNormals(int lev)
-{
-	unsigned int mem_size_Q_k      = sizeof(int)*parH[lev]->QOutflowNormalX.kQ;
-	unsigned int mem_size_Q_q      = sizeof(real)*parH[lev]->QOutflowNormalX.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QOutflowNormalX.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QOutflowNormalX.k),                 mem_size_Q_k      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QOutflowNormalY.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QOutflowNormalY.k),                 mem_size_Q_k      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QOutflowNormalZ.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QOutflowNormalZ.k),                 mem_size_Q_k      ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QOutflowNormalX.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QOutflowNormalX.k),                      mem_size_Q_k     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QOutflowNormalY.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QOutflowNormalY.k),                      mem_size_Q_k     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QOutflowNormalZ.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QOutflowNormalZ.k),                      mem_size_Q_k     ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 3.0 * (double)mem_size_Q_k + 3.0 * (double)getD3Qxx()*(double)mem_size_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyOutflowNormals(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QOutflowNormalX.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QOutflowNormalX.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QOutflowNormalX.q27[0], parH[lev]->QOutflowNormalX.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QOutflowNormalX.k,      parH[lev]->QOutflowNormalX.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QOutflowNormalY.q27[0], parH[lev]->QOutflowNormalY.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QOutflowNormalY.k,      parH[lev]->QOutflowNormalY.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QOutflowNormalZ.q27[0], parH[lev]->QOutflowNormalZ.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QOutflowNormalZ.k,      parH[lev]->QOutflowNormalZ.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeOutflowNormals(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QOutflowNormalX.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QOutflowNormalX.k));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QOutflowNormalY.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QOutflowNormalY.k));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QOutflowNormalZ.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QOutflowNormalZ.k));
-}
-//Slip
-void Parameter::cudaAllocSlipBC(int lev)
-{
-	unsigned int mem_size_Q_k      = sizeof(int)*parH[lev]->QSlip.kQ;
-	unsigned int mem_size_Q_q      = sizeof(real)*parH[lev]->QSlip.kQ;
-	//unsigned int mem_size_Q_value  = sizeof(long long)*parH[lev]->QSlip.kQ; //Geller
-	//unsigned int mem_size_Q_q_read = sizeof(real)*parH[lev]->kSlipQread;     //Geller
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QSlip.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QSlip.k),                 mem_size_Q_k      ));
-	//checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QSlip.qread),             mem_size_Q_q_read ));//Geller
-	//checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QSlip.valueQ),            mem_size_Q_value  ));//Geller
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QSlip.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QSlip.k),                      mem_size_Q_k     ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_Q_k + (double)getD3Qxx()*(double)mem_size_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopySlipBC(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QSlip.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QSlip.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QSlip.q27[0], parH[lev]->QSlip.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QSlip.k,      parH[lev]->QSlip.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeSlipBC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QSlip.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QSlip.k));
-	//checkCudaErrors( cudaFreeHost(parH[lev]->QSlip.valueQ));
-	//checkCudaErrors( cudaFreeHost(parH[lev]->QSlip.qread));
-}
-//Press (no Geller)
-void Parameter::cudaAllocPress(int lev)
-{
-	unsigned int mem_size_Q_k      = sizeof(int)*parH[lev]->QPress.kQ;
-	unsigned int mem_size_Q_q      = sizeof(real)*parH[lev]->QPress.kQ;
-	//unsigned int mem_size_Q_value  = sizeof(long long)*parH[lev]->QPress.kQ; //Geller
-	//unsigned int mem_size_Q_q_read = sizeof(real)*parH[lev]->kPressQread;     //Geller
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPress.q27[0]), getD3Qxx()*mem_size_Q_q      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPress.k),                 mem_size_Q_k      ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPress.kN),                mem_size_Q_k      )); 
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPress.RhoBC),             mem_size_Q_q      ));
-	//checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPress.qread),             mem_size_Q_q_read ));//Geller
-	//checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPress.valueQ),            mem_size_Q_value  ));//Geller
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QPress.q27[0]),     getD3Qxx()* mem_size_Q_q     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QPress.k),                      mem_size_Q_k     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QPress.kN),                     mem_size_Q_k     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QPress.RhoBC),                  mem_size_Q_q     ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 2. * (double)mem_size_Q_k + (double)mem_size_Q_q + (double)getD3Qxx()*(double)mem_size_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyPress(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QPress.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QPress.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QPress.q27[0], parH[lev]->QPress.q27[0], getD3Qxx()* mem_size_Q_q,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QPress.k,      parH[lev]->QPress.k,                  mem_size_Q_k,       cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QPress.kN,     parH[lev]->QPress.kN,                 mem_size_Q_k,       cudaMemcpyHostToDevice)); 
-	checkCudaErrors( cudaMemcpy(parD[lev]->QPress.RhoBC,  parH[lev]->QPress.RhoBC,              mem_size_Q_q,       cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreePress(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QPress.q27[0]));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QPress.k));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QPress.kN));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QPress.RhoBC));
-	//checkCudaErrors( cudaFreeHost(parH[lev]->QPress.valueQ));//Geller
-	//checkCudaErrors( cudaFreeHost(parH[lev]->QPress.qread));//Geller
-}
-//Test roundoff error
-void Parameter::cudaAllocTestRE(int lev, unsigned int size)
-{
-	unsigned int mem_size = sizeof(real)*size;
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->kDistTestRE.f[0]), (1+getD3Qxx())*mem_size));
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->kDistTestRE.f[0]), (1+getD3Qxx())*mem_size));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)size;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyTestREtoDevice(int lev, unsigned int size)
-{
-	unsigned int mem_size = sizeof(real)*size;
-	checkCudaErrors( cudaMemcpy(parD[lev]->kDistTestRE.f[0], parH[lev]->kDistTestRE.f[0], (1+getD3Qxx())*mem_size, cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyTestREtoHost(int lev, unsigned int size)
-{
-	unsigned int mem_size = sizeof(real)*size;
-	checkCudaErrors( cudaMemcpy(parH[lev]->kDistTestRE.f[0], parD[lev]->kDistTestRE.f[0], (1+getD3Qxx())*mem_size, cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeTestRE(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->kDistTestRE.f[0]));
-}
-//PressX0 = X-inflow
-void Parameter::cudaAllocPressX0(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QpressX0.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QpressX0.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX0.q27[0]), getD3Qxx()*mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX0.k),                 mem_size_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX0.kN),                mem_size_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX0.Vx),                mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX0.Vy),                mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX0.Vz),                mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX0.RhoBC),             mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX0.deltaVz),           mem_size_Q_q ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX0.q27[0]),     getD3Qxx()* mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX0.k),                      mem_size_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX0.kN),                     mem_size_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX0.Vx),                     mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX0.Vy),                     mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX0.Vz),                     mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX0.RhoBC),                  mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX0.deltaVz),                mem_size_Q_q ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 2. * (double)mem_size_Q_k + 5. * (double)mem_size_Q_q + (double)getD3Qxx()*(double)mem_size_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyPressX0(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QpressX0.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QpressX0.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX0.q27[0],  parH[lev]->QpressX0.q27[0], getD3Qxx()* mem_size_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX0.k,       parH[lev]->QpressX0.k,                  mem_size_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX0.kN,      parH[lev]->QpressX0.kN,                 mem_size_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX0.Vx,      parH[lev]->QpressX0.Vx,                 mem_size_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX0.Vy,      parH[lev]->QpressX0.Vy,                 mem_size_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX0.Vz,      parH[lev]->QpressX0.Vz,                 mem_size_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX0.RhoBC,   parH[lev]->QpressX0.RhoBC,              mem_size_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX0.deltaVz, parH[lev]->QpressX0.deltaVz,            mem_size_Q_q,  cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreePressX0(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX0.q27[0] ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX0.k      ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX0.kN     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX0.Vx     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX0.Vy     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX0.Vz     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX0.RhoBC  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX0.deltaVz));
-}
-//PressX1 = X-outflow
-void Parameter::cudaAllocPressX1(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QpressX1.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QpressX1.kQ;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX1.q27[0]), getD3Qxx()*mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX1.k),                 mem_size_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX1.kN),                mem_size_Q_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX1.Vx),                mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX1.Vy),                mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX1.Vz),                mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX1.RhoBC),             mem_size_Q_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QpressX1.deltaVz),           mem_size_Q_q ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX1.q27[0]),     getD3Qxx()* mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX1.k),                      mem_size_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX1.kN),                     mem_size_Q_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX1.Vx),                     mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX1.Vy),                     mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX1.Vz),                     mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX1.RhoBC),                  mem_size_Q_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QpressX1.deltaVz),                mem_size_Q_q ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 2. * (double)mem_size_Q_k + 5. * (double)mem_size_Q_q + (double)getD3Qxx()*(double)mem_size_Q_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyPressX1(int lev)
-{
-	unsigned int mem_size_Q_k = sizeof(int)*parH[lev]->QpressX1.kQ;
-	unsigned int mem_size_Q_q = sizeof(real)*parH[lev]->QpressX1.kQ;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX1.q27[0],  parH[lev]->QpressX1.q27[0], getD3Qxx()* mem_size_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX1.k,       parH[lev]->QpressX1.k,                  mem_size_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX1.kN,      parH[lev]->QpressX1.kN,                 mem_size_Q_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX1.Vx,      parH[lev]->QpressX1.Vx,                 mem_size_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX1.Vy,      parH[lev]->QpressX1.Vy,                 mem_size_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX1.Vz,      parH[lev]->QpressX1.Vz,                 mem_size_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX1.RhoBC,   parH[lev]->QpressX1.RhoBC,              mem_size_Q_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QpressX1.deltaVz, parH[lev]->QpressX1.deltaVz,            mem_size_Q_q,  cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreePressX1(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX1.q27[0] ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX1.k      ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX1.kN     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX1.Vx     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX1.Vy     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX1.Vz     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX1.RhoBC  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QpressX1.deltaVz));
-}
-//Propeller Velocity
-void Parameter::cudaAllocVeloPropeller(int lev)
-{
-	unsigned int mem_size_Propeller_k = sizeof(int)*parH[lev]->QPropeller.kQ;
-	unsigned int mem_size_Propeller_q = sizeof(real)*parH[lev]->QPropeller.kQ;
-
-	//Host
-	//checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPropeller.q27[0]),  getD3Qxx()*mem_size_Propeller_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPropeller.k),                  mem_size_Propeller_k ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPropeller.Vx),                 mem_size_Propeller_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPropeller.Vy),                 mem_size_Propeller_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPropeller.Vz),                 mem_size_Propeller_q ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->QPropeller.RhoBC),              mem_size_Propeller_q ));
-
-	//Device
-	//checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QPropeller.q27[0]),      getD3Qxx()*mem_size_Propeller_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QPropeller.k),                      mem_size_Propeller_k ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QPropeller.Vx),                     mem_size_Propeller_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QPropeller.Vy),                     mem_size_Propeller_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QPropeller.Vz),                     mem_size_Propeller_q ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->QPropeller.RhoBC),                  mem_size_Propeller_q ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_Propeller_k + 4. * (double)mem_size_Propeller_q;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyVeloPropeller(int lev)
-{
-	unsigned int mem_size_Propeller_k = sizeof(int)*parH[lev]->QPropeller.kQ;
-	unsigned int mem_size_Propeller_q = sizeof(real)*parH[lev]->QPropeller.kQ;
-
-	//checkCudaErrors( cudaMemcpy(parD[lev]->QPropeller.q27[0],  parH[lev]->QPropeller.q27[0], getD3Qxx()* mem_size_Propeller_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QPropeller.k,       parH[lev]->QPropeller.k,                  mem_size_Propeller_k,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QPropeller.Vx,      parH[lev]->QPropeller.Vx,                 mem_size_Propeller_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QPropeller.Vy,      parH[lev]->QPropeller.Vy,                 mem_size_Propeller_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QPropeller.Vz,      parH[lev]->QPropeller.Vz,                 mem_size_Propeller_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->QPropeller.RhoBC,   parH[lev]->QPropeller.RhoBC,              mem_size_Propeller_q,  cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeVeloPropeller(int lev)
-{
-	//checkCudaErrors( cudaFreeHost(parH[lev]->QPropeller.q27[0] ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QPropeller.k      ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QPropeller.Vx     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QPropeller.Vy     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QPropeller.Vz     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->QPropeller.RhoBC  ));
-}
-//Measure Points
-//void Parameter::cudaAllocMeasurePoints(int lev, int i)
-//{
-//	//Host
-//	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->MP[i].Vx),                 parH[lev]->memSizerealMP ));
-//	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->MP[i].Vy),                 parH[lev]->memSizerealMP ));
-//	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->MP[i].Vz),                 parH[lev]->memSizerealMP ));
-//	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->MP[i].Rho),                parH[lev]->memSizerealMP ));
-//
-//	//Device
-//	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->MP[i].Vx),                     parD[lev]->memSizerealMP ));
-//	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->MP[i].Vy),                     parD[lev]->memSizerealMP ));
-//	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->MP[i].Vz),                     parD[lev]->memSizerealMP ));
-//	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->MP[i].Rho),                    parD[lev]->memSizerealMP ));
-//}
-//void Parameter::cudaCopyMeasurePoints(int lev, int i)
-//{
-//	checkCudaErrors( cudaMemcpy(parD[lev]->MP[i].Vx,      parH[lev]->MP[i].Vx,           parH[lev]->memSizerealMP,  cudaMemcpyHostToDevice));
-//	checkCudaErrors( cudaMemcpy(parD[lev]->MP[i].Vy,      parH[lev]->MP[i].Vy,           parH[lev]->memSizerealMP,  cudaMemcpyHostToDevice));
-//	checkCudaErrors( cudaMemcpy(parD[lev]->MP[i].Vz,      parH[lev]->MP[i].Vz,           parH[lev]->memSizerealMP,  cudaMemcpyHostToDevice));
-//	checkCudaErrors( cudaMemcpy(parD[lev]->MP[i].Rho,     parH[lev]->MP[i].Rho,          parH[lev]->memSizerealMP,  cudaMemcpyHostToDevice));
-//}
-//void Parameter::cudaFreeMeasurePoints(int lev, int i)
-//{
-//	checkCudaErrors( cudaFreeHost(parH[lev]->MP[i].Vx     ));
-//	checkCudaErrors( cudaFreeHost(parH[lev]->MP[i].Vy     ));
-//	checkCudaErrors( cudaFreeHost(parH[lev]->MP[i].Vz     ));
-//	checkCudaErrors( cudaFreeHost(parH[lev]->MP[i].Rho    ));
-//}
-void Parameter::cudaAllocMeasurePointsIndex(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->kMP),						parH[lev]->memSizeIntkMP     ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->VxMP),					parH[lev]->memSizerealkMP ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->VyMP),					parH[lev]->memSizerealkMP ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->VzMP),					parH[lev]->memSizerealkMP ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->RhoMP),					parH[lev]->memSizerealkMP ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->kMP),							parD[lev]->memSizeIntkMP     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->VxMP),						parD[lev]->memSizerealkMP ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->VyMP),						parD[lev]->memSizerealkMP ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->VzMP),						parD[lev]->memSizerealkMP ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->RhoMP),						parD[lev]->memSizerealkMP ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->memSizeIntkMP + 4. * (double)parH[lev]->memSizerealkMP;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyMeasurePointsIndex(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->kMP,           parH[lev]->kMP,                parH[lev]->memSizeIntkMP,      cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->VxMP,          parH[lev]->VxMP,               parH[lev]->memSizerealkMP,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->VyMP,          parH[lev]->VyMP,               parH[lev]->memSizerealkMP,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->VzMP,          parH[lev]->VzMP,               parH[lev]->memSizerealkMP,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->RhoMP,         parH[lev]->RhoMP,              parH[lev]->memSizerealkMP,  cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyMeasurePointsToHost(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->kMP,           parD[lev]->kMP,                parH[lev]->memSizeIntkMP,      cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->VxMP,          parD[lev]->VxMP,               parH[lev]->memSizerealkMP,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->VyMP,          parD[lev]->VyMP,               parH[lev]->memSizerealkMP,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->VzMP,          parD[lev]->VzMP,               parH[lev]->memSizerealkMP,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->RhoMP,         parD[lev]->RhoMP,              parH[lev]->memSizerealkMP,  cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeMeasurePointsIndex(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->kMP));
-	checkCudaErrors( cudaFreeHost(parH[lev]->VxMP));
-	checkCudaErrors( cudaFreeHost(parH[lev]->VyMP));
-	checkCudaErrors( cudaFreeHost(parH[lev]->VzMP));
-	checkCudaErrors( cudaFreeHost(parH[lev]->RhoMP));
-}
-void Parameter::cudaAllocFsForCheckPointAndRestart(int lev)
-{
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->d0SP.f[0] ),           (unsigned long long)getD3Qxx()*(unsigned long long)parH[lev]->mem_size_real_SP));
-}
-void Parameter::cudaCopyFsForRestart(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->d0SP.f[0],  parH[lev]->d0SP.f[0],     (unsigned long long)getD3Qxx()*(unsigned long long)parH[lev]->mem_size_real_SP , cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyFsForCheckPoint(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->d0SP.f[0],  parD[lev]->d0SP.f[0],     (unsigned long long)getD3Qxx()*(unsigned long long)parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeFsForCheckPointAndRestart(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->d0SP.f[0]));
-}
-//DragLift
-void Parameter::cudaAllocDragLift(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(double)*numofelem;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->DragPreX), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->DragPreY), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->DragPreZ), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->DragPostX), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->DragPostY), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->DragPostZ), mem_size  ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->DragPreX), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->DragPreY), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->DragPreZ), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->DragPostX), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->DragPostY), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->DragPostZ), mem_size  ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 6. * (double)mem_size;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyDragLift(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(double)*numofelem;
-
-	checkCudaErrors( cudaMemcpy(parH[lev]->DragPreX, parD[lev]->DragPreX, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->DragPreY, parD[lev]->DragPreY, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->DragPreZ, parD[lev]->DragPreZ, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->DragPostX, parD[lev]->DragPostX, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->DragPostY, parD[lev]->DragPostY, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->DragPostZ, parD[lev]->DragPostZ, mem_size, cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeDragLift(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->DragPreX));
-	checkCudaErrors( cudaFreeHost(parH[lev]->DragPreY));
-	checkCudaErrors( cudaFreeHost(parH[lev]->DragPreZ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->DragPostX));
-	checkCudaErrors( cudaFreeHost(parH[lev]->DragPostY));
-	checkCudaErrors( cudaFreeHost(parH[lev]->DragPostZ));
-}
-//2ndMoments
-void Parameter::cudaAlloc2ndMoments(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->kxyFromfcNEQ   ), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->kyzFromfcNEQ   ), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->kxzFromfcNEQ   ), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->kxxMyyFromfcNEQ), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->kxxMzzFromfcNEQ), mem_size  ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->kxyFromfcNEQ   ), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->kyzFromfcNEQ   ), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->kxzFromfcNEQ   ), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->kxxMyyFromfcNEQ), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->kxxMzzFromfcNEQ), mem_size  ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 5. * (real)mem_size;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopy2ndMoments(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-
-	checkCudaErrors( cudaMemcpy(parH[lev]->kxyFromfcNEQ   , parD[lev]->kxyFromfcNEQ   , mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->kyzFromfcNEQ   , parD[lev]->kyzFromfcNEQ   , mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->kxzFromfcNEQ   , parD[lev]->kxzFromfcNEQ   , mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->kxxMyyFromfcNEQ, parD[lev]->kxxMyyFromfcNEQ, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->kxxMzzFromfcNEQ, parD[lev]->kxxMzzFromfcNEQ, mem_size, cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFree2ndMoments(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->kxyFromfcNEQ   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->kyzFromfcNEQ   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->kxzFromfcNEQ   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->kxxMyyFromfcNEQ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->kxxMzzFromfcNEQ));
-}
-//3rdMoments
-void Parameter::cudaAlloc3rdMoments(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMbbb ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMabc ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMbac ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMbca ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMcba ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMacb ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMcab ), mem_size ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMbbb ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMabc ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMbac ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMbca ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMcba ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMacb ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMcab ), mem_size ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 7. * (real)mem_size;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopy3rdMoments(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMbbb, parD[lev]->CUMbbb, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMabc, parD[lev]->CUMabc, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMbac, parD[lev]->CUMbac, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMbca, parD[lev]->CUMbca, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMcba, parD[lev]->CUMcba, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMacb, parD[lev]->CUMacb, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMcab, parD[lev]->CUMcab, mem_size, cudaMemcpyDeviceToHost));
-}																														   
-void Parameter::cudaFree3rdMoments(int lev)																				   
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMbbb ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMabc ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMbac ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMbca ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMcba ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMacb ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMcab ));
-}
-//higher order moments
-void Parameter::cudaAllocHigherMoments(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMcbb ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMbcb ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMbbc ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMcca ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMcac ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMacc ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMbcc ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMcbc ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMccb ), mem_size ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->CUMccc ), mem_size ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMcbb ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMbcb ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMbbc ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMcca ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMcac ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMacc ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMbcc ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMcbc ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMccb ), mem_size ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->CUMccc ), mem_size ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 7. * (real)mem_size;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyHigherMoments(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMcbb, parD[lev]->CUMcbb, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMbcb, parD[lev]->CUMbcb, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMbbc, parD[lev]->CUMbbc, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMcca, parD[lev]->CUMcca, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMcac, parD[lev]->CUMcac, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMacc, parD[lev]->CUMacc, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMbcc, parD[lev]->CUMbcc, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMcbc, parD[lev]->CUMcbc, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMccb, parD[lev]->CUMccb, mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->CUMccc, parD[lev]->CUMccc, mem_size, cudaMemcpyDeviceToHost));
-}																														   
-void Parameter::cudaFreeHigherMoments(int lev)																				   
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMcbb ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMbcb ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMbbc ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMcca ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMcac ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMacc ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMbcc ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMcbc ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMccb ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->CUMccc ));
-}
-//Velcities to fit the Forcing
-void Parameter::cudaAllocForceVelo(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->VxForce   ), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->VyForce   ), mem_size  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->VzForce   ), mem_size  ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->VxForce   ), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->VyForce   ), mem_size  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->VzForce   ), mem_size  ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 3. * (real)mem_size;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyForceVelo(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-
-	checkCudaErrors( cudaMemcpy(parH[lev]->VxForce   , parD[lev]->VxForce   , mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->VyForce   , parD[lev]->VyForce   , mem_size, cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->VzForce   , parD[lev]->VzForce   , mem_size, cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeForceVelo(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->VxForce   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->VyForce   ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->VzForce   ));
-}
-//Forcing
-void Parameter::cudaAllocForcing()
-{
-	unsigned int mem_size = sizeof(real) * 3;
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(this->forcingH ), mem_size));
-	//Device
-	checkCudaErrors( cudaMalloc(    (void**) &(this->forcingD ), mem_size));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (real)mem_size;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyForcingToDevice()
-{
-	unsigned int mem_size = sizeof(real) * 3;
-	checkCudaErrors( cudaMemcpy(this->forcingD, this->forcingH , mem_size, cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyForcingToHost()
-{
-	unsigned int mem_size = sizeof(real) * 3;
-	checkCudaErrors( cudaMemcpy(this->forcingH, this->forcingD , mem_size, cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeForcing()
-{
-	checkCudaErrors( cudaFreeHost(this->forcingH));
-}
-//cp Top
-void Parameter::cudaAllocCpTop(int lev)
-{
-	unsigned int mem_size_double = sizeof(double)       * parH[lev]->numberOfPointsCpTop;
-	unsigned int mem_size_int    = sizeof(unsigned int) * parH[lev]->numberOfPointsCpTop;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->cpPressTop), mem_size_double  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->cpTopIndex), mem_size_int     ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->cpPressTop), mem_size_double      ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->cpTopIndex), mem_size_int         ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_double + (double)mem_size_int;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyCpTopInit(int lev)
-{
-	unsigned int mem_size_double = sizeof(double)       * parH[lev]->numberOfPointsCpTop;
-	unsigned int mem_size_int    = sizeof(unsigned int) * parH[lev]->numberOfPointsCpTop;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->cpPressTop, parH[lev]->cpPressTop, mem_size_double, cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->cpTopIndex, parH[lev]->cpTopIndex, mem_size_int,    cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyCpTop(int lev)
-{
-	unsigned int mem_size_double = sizeof(double)       * parH[lev]->numberOfPointsCpTop;
-	//unsigned int mem_size_int    = sizeof(unsigned int) * parH[lev]->numberOfPointsCpTop;
-
-	checkCudaErrors( cudaMemcpy(parH[lev]->cpPressTop, parD[lev]->cpPressTop, mem_size_double, cudaMemcpyDeviceToHost));
-	//checkCudaErrors( cudaMemcpy(parH[lev]->cpTopIndex, parD[lev]->cpTopIndex, mem_size_int,    cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeCpTop(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->cpPressTop));
-	checkCudaErrors( cudaFreeHost(parH[lev]->cpTopIndex));
-}
-//cp Bottom
-void Parameter::cudaAllocCpBottom(int lev)
-{
-	unsigned int mem_size_double = sizeof(double)       * parH[lev]->numberOfPointsCpBottom;
-	unsigned int mem_size_int    = sizeof(unsigned int) * parH[lev]->numberOfPointsCpBottom;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->cpPressBottom), mem_size_double  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->cpBottomIndex), mem_size_int     ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->cpPressBottom), mem_size_double      ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->cpBottomIndex), mem_size_int         ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_double + (double)mem_size_int;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyCpBottomInit(int lev)
-{
-	unsigned int mem_size_double = sizeof(double)       * parH[lev]->numberOfPointsCpBottom;
-	unsigned int mem_size_int    = sizeof(unsigned int) * parH[lev]->numberOfPointsCpBottom;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->cpPressBottom, parH[lev]->cpPressBottom, mem_size_double, cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->cpBottomIndex, parH[lev]->cpBottomIndex, mem_size_int,    cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyCpBottom(int lev)
-{
-	unsigned int mem_size_double = sizeof(double)       * parH[lev]->numberOfPointsCpBottom;
-	//unsigned int mem_size_int    = sizeof(unsigned int) * parH[lev]->numberOfPointsCpBottom;
-
-	checkCudaErrors( cudaMemcpy(parH[lev]->cpPressBottom, parD[lev]->cpPressBottom, mem_size_double, cudaMemcpyDeviceToHost));
-	//checkCudaErrors( cudaMemcpy(parH[lev]->cpBottomIndex, parD[lev]->cpBottomIndex, mem_size_int,    cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeCpBottom(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->cpPressBottom));
-	checkCudaErrors( cudaFreeHost(parH[lev]->cpBottomIndex));
-}
-//cp Bottom 2
-void Parameter::cudaAllocCpBottom2(int lev)
-{
-	unsigned int mem_size_double = sizeof(double)       * parH[lev]->numberOfPointsCpBottom2;
-	unsigned int mem_size_int    = sizeof(unsigned int) * parH[lev]->numberOfPointsCpBottom2;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->cpPressBottom2), mem_size_double  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->cpBottom2Index), mem_size_int     ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->cpPressBottom2), mem_size_double      ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->cpBottom2Index), mem_size_int         ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_double + (double)mem_size_int;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyCpBottom2Init(int lev)
-{
-	unsigned int mem_size_double = sizeof(double)       * parH[lev]->numberOfPointsCpBottom2;
-	unsigned int mem_size_int    = sizeof(unsigned int) * parH[lev]->numberOfPointsCpBottom2;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->cpPressBottom2, parH[lev]->cpPressBottom2, mem_size_double, cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->cpBottom2Index, parH[lev]->cpBottom2Index, mem_size_int,    cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyCpBottom2(int lev)
-{
-	unsigned int mem_size_double = sizeof(double)       * parH[lev]->numberOfPointsCpBottom2;
-
-	checkCudaErrors( cudaMemcpy(parH[lev]->cpPressBottom2, parD[lev]->cpPressBottom2, mem_size_double, cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeCpBottom2(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->cpPressBottom2));
-	checkCudaErrors( cudaFreeHost(parH[lev]->cpBottom2Index));
-}
-//////////////////////////////////////////////////////////////////////////
-//particles
-void Parameter::cudaAllocParticles(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.coordXlocal),        parH[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.coordYlocal),        parH[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.coordZlocal),        parH[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.coordXabsolut),      parH[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.coordYabsolut),      parH[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.coordZabsolut),      parH[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.veloX),              parH[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.veloY),              parH[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.veloZ),              parH[lev]->plp.memSizerealAll  ));
-	//checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.randomLocationInit), parH[lev]->plp.memSizereal     ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.ID),                 parH[lev]->plp.memSizeID          ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.cellBaseID),         parH[lev]->plp.memSizeID          ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.timestep),           parH[lev]->plp.memSizeTimestep    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.stuck),              parH[lev]->plp.memSizeBool        ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->plp.hot),                parH[lev]->plp.memSizeBoolBC      ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.coordXlocal),            parD[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.coordYlocal),            parD[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.coordZlocal),            parD[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.coordXabsolut),          parD[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.coordYabsolut),          parD[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.coordZabsolut),          parD[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.veloX),                  parD[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.veloY),                  parD[lev]->plp.memSizerealAll  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.veloZ),                  parD[lev]->plp.memSizerealAll  ));
-	//checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.randomLocationInit),     parD[lev]->plp.memSizereal     ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.ID),                     parD[lev]->plp.memSizeID          ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.cellBaseID),             parD[lev]->plp.memSizeID          ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.timestep),               parD[lev]->plp.memSizeTimestep    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.stuck),                  parD[lev]->plp.memSizeBool        ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->plp.hot),                    parD[lev]->plp.memSizeBoolBC      ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parD[lev]->plp.memSizerealAll * (double)9.0 + (double)parD[lev]->plp.memSizeID * (double)2.0 + (double)parD[lev]->plp.memSizeTimestep 
-		+ (double)parD[lev]->plp.memSizeBool + (double)parD[lev]->plp.memSizeBoolBC;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyParticles(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.coordXlocal,        parD[lev]->plp.coordXlocal,        parH[lev]->plp.memSizerealAll,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.coordYlocal,        parD[lev]->plp.coordYlocal,        parH[lev]->plp.memSizerealAll,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.coordZlocal,        parD[lev]->plp.coordZlocal,        parH[lev]->plp.memSizerealAll,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.coordXabsolut,      parD[lev]->plp.coordXabsolut,      parH[lev]->plp.memSizerealAll,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.coordYabsolut,      parD[lev]->plp.coordYabsolut,      parH[lev]->plp.memSizerealAll,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.coordZabsolut,      parD[lev]->plp.coordZabsolut,      parH[lev]->plp.memSizerealAll,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.veloX,              parD[lev]->plp.veloX,              parH[lev]->plp.memSizerealAll,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.veloY,              parD[lev]->plp.veloY,              parH[lev]->plp.memSizerealAll,  cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.veloZ,              parD[lev]->plp.veloZ,              parH[lev]->plp.memSizerealAll,  cudaMemcpyDeviceToHost));
-	//checkCudaErrors( cudaMemcpy(parH[lev]->plp.randomLocationInit, parD[lev]->plp.randomLocationInit, parH[lev]->plp.memSizereal,     cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.ID,                 parD[lev]->plp.ID,                 parH[lev]->plp.memSizeID,          cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.cellBaseID,         parD[lev]->plp.cellBaseID,         parH[lev]->plp.memSizeID,          cudaMemcpyDeviceToHost));
-	checkCudaErrors( cudaMemcpy(parH[lev]->plp.timestep,           parD[lev]->plp.timestep,           parH[lev]->plp.memSizeTimestep,    cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeParticles(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.coordXlocal)       );
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.coordYlocal)       );
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.coordZlocal)       );
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.coordXabsolut)     );
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.coordYabsolut)     );
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.coordZabsolut)     );
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.veloX)             );
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.veloY)             );
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.veloZ)             );
-	//checkCudaErrors( cudaFreeHost(parH[lev]->plp.randomLocationInit));
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.ID)                );
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.cellBaseID)        );
-	checkCudaErrors( cudaFreeHost(parH[lev]->plp.timestep)          );
-}
-//random values
-void Parameter::cudaAllocRandomValues()
-{
-	//Device
-	checkCudaErrors( cudaMalloc((void**)&(this->devState), (sizeof(curandState)*parD[getFine()]->plp.numberOfParticles) ));
-}
-//////////////////////////////////////////////////////////////////////////
-//porous media
-void Parameter::cudaAllocPorousMedia(PorousMedia* pm, int lev)
-{
-	unsigned int mem_size_IDsPM = sizeof(unsigned int)*pm->getSizePM();
-	unsigned int *tmpIDHost, *tmpIDDevice;
-	//std::cout << "cudaMallocHost" << endl;
-	//Host
-	checkCudaErrors(cudaMallocHost((void**) &(tmpIDHost), mem_size_IDsPM));
-
-	//std::cout << "cudaMalloc" << endl;
-	//Device
-	checkCudaErrors(cudaMalloc((void**) &(tmpIDDevice), mem_size_IDsPM));
-
-	//std::cout << "set Host and Device arrays PM" << endl;
-	//////////////////////////////////////////////////////////////////////////
-	pm->setHostNodeIDsPM(tmpIDHost);
-	pm->setDeviceNodeIDsPM(tmpIDDevice);
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_IDsPM;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyPorousMedia(PorousMedia* pm, int lev)
-{
-	unsigned int mem_size_IDsPM = sizeof(unsigned int)*pm->getSizePM();
-	unsigned int *tmpIDHost   = pm->getHostNodeIDsPM();
-	unsigned int *tmpIDDevice = pm->getDeviceNodeIDsPM();
-	//////////////////////////////////////////////////////////////////////////
-	checkCudaErrors(cudaMemcpy(tmpIDDevice, tmpIDHost, mem_size_IDsPM, cudaMemcpyHostToDevice));
-	//////////////////////////////////////////////////////////////////////////
-	pm->setDeviceNodeIDsPM(tmpIDDevice);
-}
-void Parameter::cudaFreePorousMedia(PorousMedia* pm, int lev)
-{
-	checkCudaErrors(cudaFreeHost(pm->getHostNodeIDsPM()));
-}
-//////////////////////////////////////////////////////////////////////////
-//advection diffusion
-void Parameter::cudaAllocConc(int lev)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->Conc), parH[lev]->mem_size_real_SP));	
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->Conc), parD[lev]->mem_size_real_SP));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->mem_size_real_SP;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyConcDH(int lev)
-{
-	printf("Rank = %d \n", getMyID());
-	checkCudaErrors( cudaMemcpy(parH[lev]->Conc, parD[lev]->Conc,  parH[lev]->mem_size_real_SP , cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaCopyConcHD(int lev)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->Conc, parH[lev]->Conc, parH[lev]->mem_size_real_SP, cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeConc(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->Conc));
-}
-//////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocTempFs(int lev)
-{
-	//Device
-	if (getDiffMod() == 7)
-	{
-		checkCudaErrors( cudaMalloc((void**) &(parD[lev]->d7.f[0]), getDiffMod()*parH[lev]->mem_size_real_SP));
-	} 
-	else if (getDiffMod() == 27)
-	{
-		checkCudaErrors( cudaMalloc((void**) &(parD[lev]->d27.f[0]), getDiffMod()*parH[lev]->mem_size_real_SP));
-	}	
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)(getDiffMod()*parH[lev]->mem_size_real_SP);
-	setMemsizeGPU(tmp, false);
-}
-//////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocTempPressBC(int lev)
-{
-	unsigned int mem_size_TempPress_k = sizeof(int)*parH[lev]->TempPress.kTemp;
-	unsigned int mem_size_TempPress_q = sizeof(real)*parH[lev]->TempPress.kTemp;
-
-	// Host Memory
-	checkCudaErrors( cudaMallocHost((void**) &parH[lev]->TempPress.temp, mem_size_TempPress_q ));
-	checkCudaErrors( cudaMallocHost((void**) &parH[lev]->TempPress.velo, mem_size_TempPress_q ));
-	checkCudaErrors( cudaMallocHost((void**) &parH[lev]->TempPress.k,    mem_size_TempPress_k ));
-
-	// Device Memory
-	checkCudaErrors( cudaMalloc((void**) &parD[lev]->TempPress.temp, mem_size_TempPress_q));
-	checkCudaErrors( cudaMalloc((void**) &parD[lev]->TempPress.velo, mem_size_TempPress_q));
-	checkCudaErrors( cudaMalloc((void**) &parD[lev]->TempPress.k,    mem_size_TempPress_k));
-
-}
-void Parameter::cudaCopyTempPressBCHD(int lev)
-{
-	unsigned int mem_size_TempPress_k = sizeof(int)*parH[lev]->TempPress.kTemp;
-	unsigned int mem_size_TempPress_q = sizeof(real)*parH[lev]->TempPress.kTemp;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->TempPress.temp, parH[lev]->TempPress.temp, mem_size_TempPress_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->TempPress.velo, parH[lev]->TempPress.velo, mem_size_TempPress_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->TempPress.k,    parH[lev]->TempPress.k,    mem_size_TempPress_k,  cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeTempPressBC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->TempPress.temp));
-	checkCudaErrors( cudaFreeHost(parH[lev]->TempPress.velo));
-	checkCudaErrors( cudaFreeHost(parH[lev]->TempPress.k   ));
-}
-//////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocTempVeloBC(int lev)
-{
-	unsigned int mem_size_TempVel_k = sizeof(int)*parH[lev]->TempVel.kTemp;
-	unsigned int mem_size_TempVel_q = sizeof(real)*parH[lev]->TempVel.kTemp;
-
-	printf("mem_size_TempVel_k = %d,  mem_size_TempVel_q = %d \n", mem_size_TempVel_k, mem_size_TempVel_q);
-	// Host Memory
-	checkCudaErrors( cudaMallocHost((void**) &parH[lev]->TempVel.temp,      mem_size_TempVel_q ));
-	checkCudaErrors( cudaMallocHost((void**) &parH[lev]->TempVel.tempPulse, mem_size_TempVel_q ));
-	checkCudaErrors( cudaMallocHost((void**) &parH[lev]->TempVel.velo,      mem_size_TempVel_q ));
-	checkCudaErrors( cudaMallocHost((void**) &parH[lev]->TempVel.k,         mem_size_TempVel_k ));
-
-	// Device Memory
-	checkCudaErrors( cudaMalloc((void**) &parD[lev]->TempVel.temp,      mem_size_TempVel_q));
-	checkCudaErrors( cudaMalloc((void**) &parD[lev]->TempVel.tempPulse, mem_size_TempVel_q));
-	checkCudaErrors( cudaMalloc((void**) &parD[lev]->TempVel.velo,      mem_size_TempVel_q));
-	checkCudaErrors( cudaMalloc((void**) &parD[lev]->TempVel.k,         mem_size_TempVel_k));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)(mem_size_TempVel_q * 3.0 + mem_size_TempVel_k);
-	setMemsizeGPU(tmp, false);
-
-}
-void Parameter::cudaCopyTempVeloBCHD(int lev)
-{
-	unsigned int mem_size_TempVel_k = sizeof(int)*parH[lev]->TempVel.kTemp;
-	unsigned int mem_size_TempVel_q = sizeof(real)*parH[lev]->TempVel.kTemp;
-
-	printf("mem_size_TempVel_k = %d,  mem_size_TempVel_q = %d \n", mem_size_TempVel_k, mem_size_TempVel_q);
-	checkCudaErrors( cudaMemcpy(parD[lev]->TempVel.temp,      parH[lev]->TempVel.temp,      mem_size_TempVel_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->TempVel.tempPulse, parH[lev]->TempVel.tempPulse, mem_size_TempVel_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->TempVel.velo,      parH[lev]->TempVel.velo,      mem_size_TempVel_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->TempVel.k,         parH[lev]->TempVel.k,         mem_size_TempVel_k,  cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeTempVeloBC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->TempVel.temp     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->TempVel.tempPulse));
-	checkCudaErrors( cudaFreeHost(parH[lev]->TempVel.velo     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->TempVel.k        ));
-}
-//////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocTempNoSlipBC(int lev)
-{
-	unsigned int mem_size_Temp_k = sizeof(int)*parH[lev]->Temp.kTemp;
-	unsigned int mem_size_Temp_q = sizeof(real)*parH[lev]->Temp.kTemp;
-
-	// Host Memory
-	checkCudaErrors( cudaMallocHost((void**) &parH[lev]->Temp.temp, mem_size_Temp_q ));
-	checkCudaErrors( cudaMallocHost((void**) &parH[lev]->Temp.k,    mem_size_Temp_k ));
-
-	// Device Memory
-	checkCudaErrors( cudaMalloc((void**) &parD[lev]->Temp.temp, mem_size_Temp_q));
-	checkCudaErrors( cudaMalloc((void**) &parD[lev]->Temp.k,    mem_size_Temp_k));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)(mem_size_Temp_q + mem_size_Temp_k);
-	setMemsizeGPU(tmp, false);
-
-}
-void Parameter::cudaCopyTempNoSlipBCHD(int lev)
-{
-	unsigned int mem_size_Temp_k = sizeof(int)*parH[lev]->Temp.kTemp;
-	unsigned int mem_size_Temp_q = sizeof(real)*parH[lev]->Temp.kTemp;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->Temp.temp, parH[lev]->Temp.temp, mem_size_Temp_q,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->Temp.k,    parH[lev]->Temp.k,    mem_size_Temp_k,  cudaMemcpyHostToDevice));
-}
-void Parameter::cudaFreeTempNoSlipBC(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->Temp.temp));
-	checkCudaErrors( cudaFreeHost(parH[lev]->Temp.k   ));
-}
-//PlaneConc
-void Parameter::cudaAllocPlaneConcIn(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->ConcPlaneIn), mem_size  ));
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->ConcPlaneIn), mem_size  ));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyPlaneConcIn(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-	checkCudaErrors( cudaMemcpy(parH[lev]->ConcPlaneIn,   parD[lev]->ConcPlaneIn,   mem_size, cudaMemcpyDeviceToHost));
-}
-//////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocPlaneConcOut1(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->ConcPlaneOut1), mem_size  ));
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->ConcPlaneOut1), mem_size  ));
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyPlaneConcOut1(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-	checkCudaErrors( cudaMemcpy(parH[lev]->ConcPlaneOut1, parD[lev]->ConcPlaneOut1, mem_size, cudaMemcpyDeviceToHost));
-}
-//////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocPlaneConcOut2(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->ConcPlaneOut2), mem_size  ));
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->ConcPlaneOut2), mem_size  ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyPlaneConcOut2(int lev, int numofelem)
-{
-	unsigned int mem_size = sizeof(real)*numofelem;
-	checkCudaErrors( cudaMemcpy(parH[lev]->ConcPlaneOut2, parD[lev]->ConcPlaneOut2, mem_size, cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreePlaneConc(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->ConcPlaneIn));
-	checkCudaErrors( cudaFreeHost(parH[lev]->ConcPlaneOut1));
-	checkCudaErrors( cudaFreeHost(parH[lev]->ConcPlaneOut2));
-}
-//////////////////////////////////////////////////////////////////////////
-//concentration file
-void Parameter::cudaAllocConcFile(int lev)
-{
-	unsigned int mem_size_int  = sizeof(unsigned int) * parH[lev]->numberOfPointsConc;
-	unsigned int mem_size_real = sizeof(real)         * parH[lev]->numberOfPointsConc;
-
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->concIndex),     mem_size_int  ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->concentration), mem_size_real ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->concIndex),     mem_size_int  ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->concentration), mem_size_real ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = (double)mem_size_int + (double)mem_size_real;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyConcFile(int lev)
-{
-	unsigned int mem_size_int  = sizeof(unsigned int) * parH[lev]->numberOfPointsConc;
-	unsigned int mem_size_real = sizeof(real)         * parH[lev]->numberOfPointsConc;
-
-	checkCudaErrors( cudaMemcpy(parD[lev]->concIndex,     parH[lev]->concIndex,     mem_size_int,  cudaMemcpyHostToDevice));
-	checkCudaErrors( cudaMemcpy(parD[lev]->concentration, parH[lev]->concentration, mem_size_real, cudaMemcpyHostToDevice));
-}
-
-void Parameter::cudaCopyConcs(int lev)
-{
-	unsigned int mem_size_real = sizeof(real)         * parH[lev]->numberOfPointsConc;
-
-	checkCudaErrors(cudaMemcpy(parD[lev]->concentration, parH[lev]->concentration, mem_size_real, cudaMemcpyHostToDevice));
-}
-
-void Parameter::cudaFreeConcFile(int lev)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->concIndex     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->concentration ));
-}
-//////////////////////////////////////////////////////////////////////////
-//street X and Y velocity fractions
-void Parameter::cudaAllocStreetVelocityFractions(int lev)
-{
-	unsigned int mem_size_real = sizeof(real) * parH[lev]->numberOfStreetNodes;
-	unsigned int mem_size_int  = sizeof(int)  * parH[lev]->numberOfStreetNodes;
-	//printf("\nnumberOfStreetNodes = %d\n", parH[lev]->numberOfStreetNodes);
-
-	//Host
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->streetFractionXvelocity), mem_size_real));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->streetFractionYvelocity), mem_size_real));
-	checkCudaErrors(cudaMallocHost((void**) &(parH[lev]->naschVelocity          ), mem_size_int ));
-
-	//Device
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->streetFractionXvelocity), mem_size_real));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->streetFractionYvelocity), mem_size_real));
-	checkCudaErrors(cudaMalloc((void**) &(parD[lev]->naschVelocity          ), mem_size_int ));
-
-	//////////////////////////////////////////////////////////////////////////
-	double tmp = 2.0 * (double)mem_size_real + (double)mem_size_int;
-	setMemsizeGPU(tmp, false);
-}
-void Parameter::cudaCopyStreetVelocityFractions(int lev)
-{
-	unsigned int mem_size_real = sizeof(real) * parH[lev]->numberOfStreetNodes;
-	unsigned int mem_size_int  = sizeof(int)  * parH[lev]->numberOfStreetNodes;
-
-	checkCudaErrors(cudaMemcpy(parD[lev]->streetFractionXvelocity, parH[lev]->streetFractionXvelocity, mem_size_real, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->streetFractionYvelocity, parH[lev]->streetFractionYvelocity, mem_size_real, cudaMemcpyHostToDevice));
-	checkCudaErrors(cudaMemcpy(parD[lev]->naschVelocity,           parH[lev]->naschVelocity,           mem_size_int,  cudaMemcpyHostToDevice));
-}
-
-void Parameter::cudaFreeStreetVelocityFractions(int lev)
-{
-	checkCudaErrors(cudaFreeHost(parH[lev]->streetFractionXvelocity));
-	checkCudaErrors(cudaFreeHost(parH[lev]->streetFractionYvelocity));
-	checkCudaErrors(cudaFreeHost(parH[lev]->naschVelocity));
-}
-//////////////////////////////////////////////////////////////////////////
-
-//////////////////////////////////////////////////////////////////////////
-//Process Neighbors
-//1D domain decomposition
-void Parameter::cudaAllocProcessNeighbor(int lev, unsigned int processNeighbor)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighbor[processNeighbor].index ),                  parH[lev]->sendProcessNeighbor[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighbor[processNeighbor].f[0]  ),     getD3Qxx() * parH[lev]->sendProcessNeighbor[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighbor[processNeighbor].index ),                  parH[lev]->recvProcessNeighbor[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighbor[processNeighbor].f[0]  ),     getD3Qxx() * parH[lev]->recvProcessNeighbor[processNeighbor].memsizeFs    ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighbor[processNeighbor].index ),                      parD[lev]->sendProcessNeighbor[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighbor[processNeighbor].f[0]  ),         getD3Qxx() * parD[lev]->sendProcessNeighbor[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighbor[processNeighbor].index ),                      parD[lev]->recvProcessNeighbor[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighbor[processNeighbor].f[0]  ),         getD3Qxx() * parD[lev]->recvProcessNeighbor[processNeighbor].memsizeFs    ));
-
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->sendProcessNeighbor[processNeighbor].memsizeIndex + (double)getD3Qxx()*(double)parH[lev]->sendProcessNeighbor[processNeighbor].memsizeFs + 
-				 (double)parH[lev]->recvProcessNeighbor[processNeighbor].memsizeIndex + (double)getD3Qxx()*(double)parH[lev]->recvProcessNeighbor[processNeighbor].memsizeFs;
-	setMemsizeGPU(tmp, false);
-	//printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
-}
-void Parameter::cudaCopyProcessNeighborIndex(int lev, unsigned int processNeighbor)
-{
-	//copy send Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->sendProcessNeighbor[processNeighbor].index, 
-								parH[lev]->sendProcessNeighbor[processNeighbor].index, 
-								parH[lev]->sendProcessNeighbor[processNeighbor].memsizeIndex, 
-								cudaMemcpyHostToDevice));
-	//copy recv Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighbor[processNeighbor].index, 
-								parH[lev]->recvProcessNeighbor[processNeighbor].index, 
-								parH[lev]->recvProcessNeighbor[processNeighbor].memsizeIndex, 
-								cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborFsHD(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighbor[processNeighbor].f[0], 
-								parH[lev]->recvProcessNeighbor[processNeighbor].f[0], 
-								getD3Qxx() * parD[lev]->recvProcessNeighbor[processNeighbor].memsizeFs, 
-								cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborFsDH(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->sendProcessNeighbor[processNeighbor].f[0], 
-								parD[lev]->sendProcessNeighbor[processNeighbor].f[0], 
-								getD3Qxx() * parD[lev]->sendProcessNeighbor[processNeighbor].memsizeFs, 
-								cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeProcessNeighbor(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighbor[processNeighbor].index ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighbor[processNeighbor].f[0]     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighbor[processNeighbor].index  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighbor[processNeighbor].f[0]     ));
-}
-////////////////////////////////////////////////////////////////////////////////////
-//  3D domain decomposition
-//  X  /////////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocProcessNeighborX(int lev, unsigned int processNeighbor)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborX[processNeighbor].index ),                  parH[lev]->sendProcessNeighborX[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborX[processNeighbor].f[0]  ),     getD3Qxx() * parH[lev]->sendProcessNeighborX[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborX[processNeighbor].index ),                  parH[lev]->recvProcessNeighborX[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborX[processNeighbor].f[0]  ),     getD3Qxx() * parH[lev]->recvProcessNeighborX[processNeighbor].memsizeFs    ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborX[processNeighbor].index ),                      parD[lev]->sendProcessNeighborX[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborX[processNeighbor].f[0]  ),         getD3Qxx() * parD[lev]->sendProcessNeighborX[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborX[processNeighbor].index ),                      parD[lev]->recvProcessNeighborX[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborX[processNeighbor].f[0]  ),         getD3Qxx() * parD[lev]->recvProcessNeighborX[processNeighbor].memsizeFs    ));
-
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->sendProcessNeighborX[processNeighbor].memsizeIndex + (double)getD3Qxx()*(double)parH[lev]->sendProcessNeighborX[processNeighbor].memsizeFs + 
-				 (double)parH[lev]->recvProcessNeighborX[processNeighbor].memsizeIndex + (double)getD3Qxx()*(double)parH[lev]->recvProcessNeighborX[processNeighbor].memsizeFs;
-	setMemsizeGPU(tmp, false);
-	//printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
-}
-void Parameter::cudaCopyProcessNeighborXIndex(int lev, unsigned int processNeighbor)
-{
-	//copy send Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->sendProcessNeighborX[processNeighbor].index, 
-								parH[lev]->sendProcessNeighborX[processNeighbor].index, 
-								parH[lev]->sendProcessNeighborX[processNeighbor].memsizeIndex, 
-								cudaMemcpyHostToDevice));
-	//copy recv Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborX[processNeighbor].index, 
-								parH[lev]->recvProcessNeighborX[processNeighbor].index, 
-								parH[lev]->recvProcessNeighborX[processNeighbor].memsizeIndex, 
-								cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborXFsHD(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborX[processNeighbor].f[0], 
-								parH[lev]->recvProcessNeighborX[processNeighbor].f[0], 
-								getD3Qxx() * parD[lev]->recvProcessNeighborX[processNeighbor].memsizeFs, 
-								cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborXFsDH(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->sendProcessNeighborX[processNeighbor].f[0], 
-								parD[lev]->sendProcessNeighborX[processNeighbor].f[0], 
-								getD3Qxx() * parD[lev]->sendProcessNeighborX[processNeighbor].memsizeFs, 
-								cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeProcessNeighborX(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborX[processNeighbor].index ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborX[processNeighbor].f[0]     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborX[processNeighbor].index  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborX[processNeighbor].f[0]     ));
-}
-//  Y  /////////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocProcessNeighborY(int lev, unsigned int processNeighbor)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborY[processNeighbor].index ),                  parH[lev]->sendProcessNeighborY[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborY[processNeighbor].f[0]  ),     getD3Qxx() * parH[lev]->sendProcessNeighborY[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborY[processNeighbor].index ),                  parH[lev]->recvProcessNeighborY[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborY[processNeighbor].f[0]  ),     getD3Qxx() * parH[lev]->recvProcessNeighborY[processNeighbor].memsizeFs    ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborY[processNeighbor].index ),                      parD[lev]->sendProcessNeighborY[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborY[processNeighbor].f[0]  ),         getD3Qxx() * parD[lev]->sendProcessNeighborY[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborY[processNeighbor].index ),                      parD[lev]->recvProcessNeighborY[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborY[processNeighbor].f[0]  ),         getD3Qxx() * parD[lev]->recvProcessNeighborY[processNeighbor].memsizeFs    ));
-
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->sendProcessNeighborY[processNeighbor].memsizeIndex + (double)getD3Qxx()*(double)parH[lev]->sendProcessNeighborY[processNeighbor].memsizeFs + 
-				 (double)parH[lev]->recvProcessNeighborY[processNeighbor].memsizeIndex + (double)getD3Qxx()*(double)parH[lev]->recvProcessNeighborY[processNeighbor].memsizeFs;
-	setMemsizeGPU(tmp, false);
-	//printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
-}
-void Parameter::cudaCopyProcessNeighborYIndex(int lev, unsigned int processNeighbor)
-{
-	//copy send Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->sendProcessNeighborY[processNeighbor].index, 
-								parH[lev]->sendProcessNeighborY[processNeighbor].index, 
-								parH[lev]->sendProcessNeighborY[processNeighbor].memsizeIndex, 
-								cudaMemcpyHostToDevice));
-	//copy recv Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborY[processNeighbor].index, 
-								parH[lev]->recvProcessNeighborY[processNeighbor].index, 
-								parH[lev]->recvProcessNeighborY[processNeighbor].memsizeIndex, 
-								cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborYFsHD(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborY[processNeighbor].f[0], 
-								parH[lev]->recvProcessNeighborY[processNeighbor].f[0], 
-								getD3Qxx() * parD[lev]->recvProcessNeighborY[processNeighbor].memsizeFs, 
-								cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborYFsDH(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->sendProcessNeighborY[processNeighbor].f[0], 
-								parD[lev]->sendProcessNeighborY[processNeighbor].f[0], 
-								getD3Qxx() * parD[lev]->sendProcessNeighborY[processNeighbor].memsizeFs, 
-								cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeProcessNeighborY(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborY[processNeighbor].index ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborY[processNeighbor].f[0]     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborY[processNeighbor].index  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborY[processNeighbor].f[0]     ));
-}
-//  Z  /////////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocProcessNeighborZ(int lev, unsigned int processNeighbor)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborZ[processNeighbor].index ),                  parH[lev]->sendProcessNeighborZ[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborZ[processNeighbor].f[0]  ),     getD3Qxx() * parH[lev]->sendProcessNeighborZ[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborZ[processNeighbor].index ),                  parH[lev]->recvProcessNeighborZ[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborZ[processNeighbor].f[0]  ),     getD3Qxx() * parH[lev]->recvProcessNeighborZ[processNeighbor].memsizeFs    ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborZ[processNeighbor].index ),                      parD[lev]->sendProcessNeighborZ[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborZ[processNeighbor].f[0]  ),         getD3Qxx() * parD[lev]->sendProcessNeighborZ[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborZ[processNeighbor].index ),                      parD[lev]->recvProcessNeighborZ[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborZ[processNeighbor].f[0]  ),         getD3Qxx() * parD[lev]->recvProcessNeighborZ[processNeighbor].memsizeFs    ));
-
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->sendProcessNeighborZ[processNeighbor].memsizeIndex + (double)getD3Qxx()*(double)parH[lev]->sendProcessNeighborZ[processNeighbor].memsizeFs + 
-				 (double)parH[lev]->recvProcessNeighborZ[processNeighbor].memsizeIndex + (double)getD3Qxx()*(double)parH[lev]->recvProcessNeighborZ[processNeighbor].memsizeFs;
-	setMemsizeGPU(tmp, false);
-	//printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
-}
-void Parameter::cudaCopyProcessNeighborZIndex(int lev, unsigned int processNeighbor)
-{
-	//copy send Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->sendProcessNeighborZ[processNeighbor].index, 
-								parH[lev]->sendProcessNeighborZ[processNeighbor].index, 
-								parH[lev]->sendProcessNeighborZ[processNeighbor].memsizeIndex, 
-								cudaMemcpyHostToDevice));
-	//copy recv Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborZ[processNeighbor].index, 
-								parH[lev]->recvProcessNeighborZ[processNeighbor].index, 
-								parH[lev]->recvProcessNeighborZ[processNeighbor].memsizeIndex, 
-								cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborZFsHD(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborZ[processNeighbor].f[0], 
-								parH[lev]->recvProcessNeighborZ[processNeighbor].f[0], 
-								getD3Qxx() * parD[lev]->recvProcessNeighborZ[processNeighbor].memsizeFs, 
-								cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborZFsDH(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->sendProcessNeighborZ[processNeighbor].f[0], 
-								parD[lev]->sendProcessNeighborZ[processNeighbor].f[0], 
-								getD3Qxx() * parD[lev]->sendProcessNeighborZ[processNeighbor].memsizeFs, 
-								cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeProcessNeighborZ(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborZ[processNeighbor].index ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborZ[processNeighbor].f[0]     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborZ[processNeighbor].index  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborZ[processNeighbor].f[0]     ));
-}
-////////////////////////////////////////////////////////////////////////////////////
-//  3D domain decomposition convection diffusion
-//  X  /////////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocProcessNeighborADX(int lev, unsigned int processNeighbor)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborADX[processNeighbor].index ),                  parH[lev]->sendProcessNeighborADX[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborADX[processNeighbor].f[0]  ),   getDiffMod() * parH[lev]->sendProcessNeighborADX[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborADX[processNeighbor].index ),                  parH[lev]->recvProcessNeighborADX[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborADX[processNeighbor].f[0]  ),   getDiffMod() * parH[lev]->recvProcessNeighborADX[processNeighbor].memsizeFs    ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborADX[processNeighbor].index ),                      parD[lev]->sendProcessNeighborADX[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborADX[processNeighbor].f[0]  ),       getDiffMod() * parD[lev]->sendProcessNeighborADX[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborADX[processNeighbor].index ),                      parD[lev]->recvProcessNeighborADX[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborADX[processNeighbor].f[0]  ),       getDiffMod() * parD[lev]->recvProcessNeighborADX[processNeighbor].memsizeFs    ));
-
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->sendProcessNeighborADX[processNeighbor].memsizeIndex + (double)getDiffMod()*(double)parH[lev]->sendProcessNeighborADX[processNeighbor].memsizeFs + 
-		         (double)parH[lev]->recvProcessNeighborADX[processNeighbor].memsizeIndex + (double)getDiffMod()*(double)parH[lev]->recvProcessNeighborADX[processNeighbor].memsizeFs;
-	setMemsizeGPU(tmp, false);
-	//printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
-}
-void Parameter::cudaCopyProcessNeighborADXIndex(int lev, unsigned int processNeighbor)
-{
-	//copy send Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->sendProcessNeighborADX[processNeighbor].index, 
-		                        parH[lev]->sendProcessNeighborADX[processNeighbor].index, 
-		                        parH[lev]->sendProcessNeighborADX[processNeighbor].memsizeIndex, 
-		                        cudaMemcpyHostToDevice));
-	//copy recv Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborADX[processNeighbor].index, 
-		                        parH[lev]->recvProcessNeighborADX[processNeighbor].index, 
-		                        parH[lev]->recvProcessNeighborADX[processNeighbor].memsizeIndex, 
-		                        cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborADXFsHD(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborADX[processNeighbor].f[0], 
-		                        parH[lev]->recvProcessNeighborADX[processNeighbor].f[0], 
-		         getDiffMod() * parD[lev]->recvProcessNeighborADX[processNeighbor].memsizeFs, 
-		                        cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborADXFsDH(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->sendProcessNeighborADX[processNeighbor].f[0], 
-		                        parD[lev]->sendProcessNeighborADX[processNeighbor].f[0], 
-		         getDiffMod() * parD[lev]->sendProcessNeighborADX[processNeighbor].memsizeFs, 
-		                        cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeProcessNeighborADX(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborADX[processNeighbor].index ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborADX[processNeighbor].f[0]     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborADX[processNeighbor].index  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborADX[processNeighbor].f[0]     ));
-}
-//  Y  /////////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocProcessNeighborADY(int lev, unsigned int processNeighbor)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborADY[processNeighbor].index ),                  parH[lev]->sendProcessNeighborADY[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborADY[processNeighbor].f[0]  ),   getDiffMod() * parH[lev]->sendProcessNeighborADY[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborADY[processNeighbor].index ),                  parH[lev]->recvProcessNeighborADY[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborADY[processNeighbor].f[0]  ),   getDiffMod() * parH[lev]->recvProcessNeighborADY[processNeighbor].memsizeFs    ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborADY[processNeighbor].index ),                      parD[lev]->sendProcessNeighborADY[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborADY[processNeighbor].f[0]  ),       getDiffMod() * parD[lev]->sendProcessNeighborADY[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborADY[processNeighbor].index ),                      parD[lev]->recvProcessNeighborADY[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborADY[processNeighbor].f[0]  ),       getDiffMod() * parD[lev]->recvProcessNeighborADY[processNeighbor].memsizeFs    ));
-
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->sendProcessNeighborADY[processNeighbor].memsizeIndex + (double)getDiffMod()*(double)parH[lev]->sendProcessNeighborADY[processNeighbor].memsizeFs + 
-		         (double)parH[lev]->recvProcessNeighborADY[processNeighbor].memsizeIndex + (double)getDiffMod()*(double)parH[lev]->recvProcessNeighborADY[processNeighbor].memsizeFs;
-	setMemsizeGPU(tmp, false);
-	//printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
-}
-void Parameter::cudaCopyProcessNeighborADYIndex(int lev, unsigned int processNeighbor)
-{
-	//copy send Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->sendProcessNeighborADY[processNeighbor].index, 
-		                        parH[lev]->sendProcessNeighborADY[processNeighbor].index, 
-		                        parH[lev]->sendProcessNeighborADY[processNeighbor].memsizeIndex, 
-		                        cudaMemcpyHostToDevice));
-	//copy recv Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborADY[processNeighbor].index, 
-		                        parH[lev]->recvProcessNeighborADY[processNeighbor].index, 
-		                        parH[lev]->recvProcessNeighborADY[processNeighbor].memsizeIndex, 
-		                        cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborADYFsHD(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborADY[processNeighbor].f[0], 
-		                        parH[lev]->recvProcessNeighborADY[processNeighbor].f[0], 
-		         getDiffMod() * parD[lev]->recvProcessNeighborADY[processNeighbor].memsizeFs, 
-		                        cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborADYFsDH(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->sendProcessNeighborADY[processNeighbor].f[0], 
-		                        parD[lev]->sendProcessNeighborADY[processNeighbor].f[0], 
-		         getDiffMod() * parD[lev]->sendProcessNeighborADY[processNeighbor].memsizeFs, 
-		                        cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeProcessNeighborADY(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborADY[processNeighbor].index ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborADY[processNeighbor].f[0]     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborADY[processNeighbor].index  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborADY[processNeighbor].f[0]     ));
-}
-//  Z  /////////////////////////////////////////////////////////////////////////////
-void Parameter::cudaAllocProcessNeighborADZ(int lev, unsigned int processNeighbor)
-{
-	//Host
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborADZ[processNeighbor].index ),                  parH[lev]->sendProcessNeighborADZ[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->sendProcessNeighborADZ[processNeighbor].f[0]  ),   getDiffMod() * parH[lev]->sendProcessNeighborADZ[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborADZ[processNeighbor].index ),                  parH[lev]->recvProcessNeighborADZ[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMallocHost((void**) &(parH[lev]->recvProcessNeighborADZ[processNeighbor].f[0]  ),   getDiffMod() * parH[lev]->recvProcessNeighborADZ[processNeighbor].memsizeFs    ));
-
-	//Device
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborADZ[processNeighbor].index ),                      parD[lev]->sendProcessNeighborADZ[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->sendProcessNeighborADZ[processNeighbor].f[0]  ),       getDiffMod() * parD[lev]->sendProcessNeighborADZ[processNeighbor].memsizeFs    ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborADZ[processNeighbor].index ),                      parD[lev]->recvProcessNeighborADZ[processNeighbor].memsizeIndex ));
-	checkCudaErrors( cudaMalloc((void**) &(parD[lev]->recvProcessNeighborADZ[processNeighbor].f[0]  ),       getDiffMod() * parD[lev]->recvProcessNeighborADZ[processNeighbor].memsizeFs    ));
-
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	double tmp = (double)parH[lev]->sendProcessNeighborADZ[processNeighbor].memsizeIndex + (double)getDiffMod()*(double)parH[lev]->sendProcessNeighborADZ[processNeighbor].memsizeFs + 
-		         (double)parH[lev]->recvProcessNeighborADZ[processNeighbor].memsizeIndex + (double)getDiffMod()*(double)parH[lev]->recvProcessNeighborADZ[processNeighbor].memsizeFs;
-	setMemsizeGPU(tmp, false);
-	//printf("memsize GPU for neighbors %f \n",tmp/1000000.0);
-}
-void Parameter::cudaCopyProcessNeighborADZIndex(int lev, unsigned int processNeighbor)
-{
-	//copy send Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->sendProcessNeighborADZ[processNeighbor].index, 
-		                        parH[lev]->sendProcessNeighborADZ[processNeighbor].index, 
-		                        parH[lev]->sendProcessNeighborADZ[processNeighbor].memsizeIndex, 
-		                        cudaMemcpyHostToDevice));
-	//copy recv Index
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborADZ[processNeighbor].index, 
-		                        parH[lev]->recvProcessNeighborADZ[processNeighbor].index, 
-		                        parH[lev]->recvProcessNeighborADZ[processNeighbor].memsizeIndex, 
-		                        cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborADZFsHD(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parD[lev]->recvProcessNeighborADZ[processNeighbor].f[0], 
-		                        parH[lev]->recvProcessNeighborADZ[processNeighbor].f[0], 
-		         getDiffMod() * parD[lev]->recvProcessNeighborADZ[processNeighbor].memsizeFs, 
-		                        cudaMemcpyHostToDevice));
-}
-void Parameter::cudaCopyProcessNeighborADZFsDH(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaMemcpy(parH[lev]->sendProcessNeighborADZ[processNeighbor].f[0], 
-		                        parD[lev]->sendProcessNeighborADZ[processNeighbor].f[0], 
-		         getDiffMod() * parD[lev]->sendProcessNeighborADZ[processNeighbor].memsizeFs, 
-		                        cudaMemcpyDeviceToHost));
-}
-void Parameter::cudaFreeProcessNeighborADZ(int lev, unsigned int processNeighbor)
-{
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborADZ[processNeighbor].index ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->sendProcessNeighborADZ[processNeighbor].f[0]     ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborADZ[processNeighbor].index  ));
-	checkCudaErrors( cudaFreeHost(parH[lev]->recvProcessNeighborADZ[processNeighbor].f[0]     ));
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
 
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
index c0a9daa6399e5067643f555a5046efafc478dd75..25946704edcad12513d1b8a2c70cd551eb1dd619 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
@@ -306,277 +306,6 @@ public:
 	//measure points
 	void copyMeasurePointsArrayToVector(int lev);
 
-	//alloc
-	void cudaAllocFull(int lev);
-	void cudaFreeFull(int lev);
-
-	void cudaAllocCoord(int lev);
-	void cudaCopyCoord(int lev);
-	void cudaFreeCoord(int lev);
-
-	void cudaCopyPrint(int lev);
-	void cudaCopyMedianPrint(int lev);
-	void cudaCopyMedianADPrint(int lev);
-
-	void cudaAllocSP(int lev);
-	void cudaCopySP(int lev);
-	void cudaFreeSP(int lev);
-
-	void cudaAllocF3SP(int lev);
-
-	void cudaAllocNeighborWSB(int lev);
-	void cudaCopyNeighborWSB(int lev);
-	void cudaFreeNeighborWSB(int lev);
-
-	void cudaAllocTurbulentViscosity(int lev);
-	void cudaCopyTurbulentViscosityHD(int lev);
-	void cudaCopyTurbulentViscosityDH(int lev);
-	void cudaFreeTurbulentViscosity(int lev);
-
-	void cudaAllocMedianSP(int lev);
-	void cudaCopyMedianSP(int lev);
-	void cudaFreeMedianSP(int lev);
-	void cudaAllocMedianOut(int lev);
-	void cudaFreeMedianOut(int lev);
-
-	void cudaAllocMedianAD(int lev);
-	void cudaCopyMedianAD(int lev);
-	void cudaFreeMedianAD(int lev);
-	void cudaAllocMedianOutAD(int lev);
-	void cudaFreeMedianOutAD(int lev);
-
-	void cudaAllocInterfaceCF(int lev);
-	void cudaCopyInterfaceCF(int lev);
-	void cudaFreeInterfaceCF(int lev);
-	void cudaAllocInterfaceFC(int lev);
-	void cudaCopyInterfaceFC(int lev);
-	void cudaFreeInterfaceFC(int lev);
-	void cudaAllocInterfaceOffCF(int lev);
-	void cudaCopyInterfaceOffCF(int lev);
-	void cudaFreeInterfaceOffCF(int lev);
-	void cudaAllocInterfaceOffFC(int lev);
-	void cudaCopyInterfaceOffFC(int lev);
-	void cudaFreeInterfaceOffFC(int lev);
-
-	void cudaAllocVeloBC(int lev);
-	void cudaCopyVeloBC(int lev);
-	void cudaFreeVeloBC(int lev);
-	void cudaAllocOutflowBC(int lev);
-	void cudaCopyOutflowBC(int lev);
-	void cudaFreeOutflowBC(int lev);
-	void cudaAllocWallBC(int lev);
-	void cudaCopyWallBC(int lev);
-	void cudaFreeWallBC(int lev);
-	void cudaAllocSlipBC(int lev);
-	void cudaCopySlipBC(int lev);
-	void cudaFreeSlipBC(int lev);
-
-	void cudaAllocGeomValuesBC(int lev);
-	void cudaCopyGeomValuesBC(int lev);
-	void cudaFreeGeomValuesBC(int lev);
-	void cudaAllocGeomBC(int lev);
-	void cudaCopyGeomBC(int lev);
-	void cudaFreeGeomBC(int lev);
-	//Normals
-	void cudaAllocGeomNormals(int lev);
-	void cudaCopyGeomNormals(int lev);
-	void cudaFreeGeomNormals(int lev);
-	void cudaAllocInflowNormals(int lev);
-	void cudaCopyInflowNormals(int lev);
-	void cudaFreeInflowNormals(int lev);
-	void cudaAllocOutflowNormals(int lev);
-	void cudaCopyOutflowNormals(int lev);
-	void cudaFreeOutflowNormals(int lev);
-
-	void cudaAllocPress(int lev);
-	void cudaCopyPress(int lev);
-	void cudaFreePress(int lev);
-	void cudaAllocTestRE(int lev, unsigned int size);
-	void cudaCopyTestREtoDevice(int lev, unsigned int size);
-	void cudaCopyTestREtoHost(int lev, unsigned int size);
-	void cudaFreeTestRE(int lev);
-
-	void cudaAllocCpTop(int lev);
-	void cudaCopyCpTopInit(int lev);
-	void cudaCopyCpTop(int lev);
-	void cudaFreeCpTop(int lev);
-
-	void cudaAllocCpBottom(int lev);
-	void cudaCopyCpBottomInit(int lev);
-	void cudaCopyCpBottom(int lev);
-	void cudaFreeCpBottom(int lev);
-
-	void cudaAllocCpBottom2(int lev);
-	void cudaCopyCpBottom2Init(int lev);
-	void cudaCopyCpBottom2(int lev);
-	void cudaFreeCpBottom2(int lev);
-
-	void cudaAllocConcFile(int lev);
-	void cudaCopyConcFile(int lev);
-	void cudaCopyConcs(int lev);
-	void cudaFreeConcFile(int lev);
-
-	void cudaAllocStreetVelocityFractions(int lev);
-	void cudaCopyStreetVelocityFractions(int lev);
-	void cudaFreeStreetVelocityFractions(int lev);
-
-	void cudaAllocInlet(int lev);
-	void cudaCopyInlet(int lev);
-	void cudaFreeInlet(int lev);
-	void cudaAllocOutlet(int lev);
-	void cudaCopyOutlet(int lev);
-	void cudaFreeOutlet(int lev);
-
-
-	void cudaAllocPressX0(int lev);
-	void cudaCopyPressX0(int lev);
-	void cudaFreePressX0(int lev);
-	void cudaAllocPressX1(int lev);
-	void cudaCopyPressX1(int lev);
-	void cudaFreePressX1(int lev);
-
-	void cudaAllocVeloPropeller(int lev);
-	void cudaCopyVeloPropeller(int lev);
-	void cudaFreeVeloPropeller(int lev);
-
-	void cudaAllocMeasurePoints(int lev, int i);
-	void cudaCopyMeasurePoints(int lev, int i);
-	void cudaFreeMeasurePoints(int lev, int i);
-	void cudaAllocMeasurePointsIndex(int lev);
-	void cudaCopyMeasurePointsIndex(int lev);
-	void cudaCopyMeasurePointsToHost(int lev);
-	void cudaFreeMeasurePointsIndex(int lev);
-
-	void cudaAllocFsForCheckPointAndRestart(int lev);
-	void cudaCopyFsForRestart(int lev);
-	void cudaCopyFsForCheckPoint(int lev);
-	void cudaFreeFsForCheckPointAndRestart(int lev);
-
-	void cudaAllocDragLift(int lev, int numofelem);
-	void cudaCopyDragLift(int lev, int numofelem);
-	void cudaFreeDragLift(int lev);
-
-	void cudaAlloc2ndMoments(int lev, int numofelem);
-	void cudaCopy2ndMoments(int lev, int numofelem);
-	void cudaFree2ndMoments(int lev);
-
-	void cudaAlloc3rdMoments(int lev, int numofelem);
-	void cudaCopy3rdMoments(int lev, int numofelem);
-	void cudaFree3rdMoments(int lev);
-
-	void cudaAllocHigherMoments(int lev, int numofelem);
-	void cudaCopyHigherMoments(int lev, int numofelem);
-	void cudaFreeHigherMoments(int lev);
-
-	void cudaAllocForceVelo(int lev, int numofelem);
-	void cudaCopyForceVelo(int lev, int numofelem);
-	void cudaFreeForceVelo(int lev);
-
-	void cudaAllocForcing();
-	void cudaCopyForcingToDevice();
-	void cudaCopyForcingToHost();
-	void cudaFreeForcing();
-
-	//////////////////////////////////////////////////////////////////////////
-	//Particles
-	void cudaAllocParticles(int lev);
-	void cudaCopyParticles(int lev);
-	void cudaFreeParticles(int lev);
-	//random value
-	void cudaAllocRandomValues();
-	//////////////////////////////////////////////////////////////////////////
-
-
-	//////////////////////////////////////////////////////////////////////////
-	//Porous Media
-	void cudaAllocPorousMedia(PorousMedia* pm, int lev);
-	void cudaCopyPorousMedia(PorousMedia* pm, int lev);
-	void cudaFreePorousMedia(PorousMedia* pm, int lev);
-	//////////////////////////////////////////////////////////////////////////
-
-
-	//////////////////////////////////////////////////////////////////////////
-	//Temperature
-	void cudaAllocConc(int lev);
-	void cudaCopyConcDH(int lev);
-	void cudaCopyConcHD(int lev);
-	void cudaFreeConc(int lev);
-	//////////////////////////////////////////////////////////////////////////
-	void cudaAllocTempFs(int lev);
-	//////////////////////////////////////////////////////////////////////////
-	void cudaAllocTempPressBC(int lev);
-	void cudaCopyTempPressBCHD(int lev);
-	void cudaFreeTempPressBC(int lev);
-	//////////////////////////////////////////////////////////////////////////
-	void cudaAllocTempVeloBC(int lev);
-	void cudaCopyTempVeloBCHD(int lev);
-	void cudaFreeTempVeloBC(int lev);
-	//////////////////////////////////////////////////////////////////////////
-	void cudaAllocTempNoSlipBC(int lev);
-	void cudaCopyTempNoSlipBCHD(int lev);
-	void cudaFreeTempNoSlipBC(int lev);
-	//////////////////////////////////////////////////////////////////////////
-	void cudaAllocPlaneConcIn(int lev, int numofelem);
-	void cudaCopyPlaneConcIn(int lev, int numofelem);
-	void cudaAllocPlaneConcOut1(int lev, int numofelem);
-	void cudaCopyPlaneConcOut1(int lev, int numofelem);
-	void cudaAllocPlaneConcOut2(int lev, int numofelem);
-	void cudaCopyPlaneConcOut2(int lev, int numofelem);
-	void cudaFreePlaneConc(int lev);
-	//////////////////////////////////////////////////////////////////////////
-
-
-	//////////////////////////////////////////////////////////////////////////
-	//1D domain decomposition
-	void cudaAllocProcessNeighbor(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborFsHD(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborFsDH(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborIndex(int lev, unsigned int processNeighbor);
-	void cudaFreeProcessNeighbor(int lev, unsigned int processNeighbor);
-	//////////////////////////////////////////////////////////////////////////
-	//3D domain decomposition
-	void cudaAllocProcessNeighborX(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborXFsHD(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborXFsDH(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborXIndex(int lev, unsigned int processNeighbor);
-	void cudaFreeProcessNeighborX(int lev, unsigned int processNeighbor);
-	//
-	void cudaAllocProcessNeighborY(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborYFsHD(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborYFsDH(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborYIndex(int lev, unsigned int processNeighbor);
-	void cudaFreeProcessNeighborY(int lev, unsigned int processNeighbor);
-	//
-	void cudaAllocProcessNeighborZ(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborZFsHD(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborZFsDH(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborZIndex(int lev, unsigned int processNeighbor);
-	void cudaFreeProcessNeighborZ(int lev, unsigned int processNeighbor);
-	//////////////////////////////////////////////////////////////////////////
-	//3D domain decomposition convection diffusion
-	void cudaAllocProcessNeighborADX(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborADXFsHD(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborADXFsDH(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborADXIndex(int lev, unsigned int processNeighbor);
-	void cudaFreeProcessNeighborADX(int lev, unsigned int processNeighbor);
-	//
-	void cudaAllocProcessNeighborADY(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborADYFsHD(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborADYFsDH(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborADYIndex(int lev, unsigned int processNeighbor);
-	void cudaFreeProcessNeighborADY(int lev, unsigned int processNeighbor);
-	//
-	void cudaAllocProcessNeighborADZ(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborADZFsHD(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborADZFsDH(int lev, unsigned int processNeighbor);
-	void cudaCopyProcessNeighborADZIndex(int lev, unsigned int processNeighbor);
-	void cudaFreeProcessNeighborADZ(int lev, unsigned int processNeighbor);
-	//////////////////////////////////////////////////////////////////////////
-
-
-
-
-
 	//////////////////////////////////////////////////////////////////////////
 	//setter
 	void setForcing(real forcingX, real forcingY, real forcingZ);