From cfd00499e6eb18fcb8e4c078fbfe15898b3af7a0 Mon Sep 17 00:00:00 2001
From: Soeren Peters <peters@irmb.tu-bs.de>
Date: Mon, 6 Jul 2020 16:58:25 +0200
Subject: [PATCH] Moved GridGenerator to /src/gpu Made VF_GPU work with the
 "new" cmake

---
 CMake/3rd/boost.cmake                         |    2 +-
 CMake/3rd/mpi.cmake                           |    2 +-
 gpu.cmake                                     |   15 +-
 gpu/src/VirtualFluids_GPU/CMakeLists.txt      |   46 +
 .../Calculation/ForceCalculations.h           |    2 +-
 .../Input/PositionReader.cpp                  |    6 +-
 .../Input/VtkGeometryReader.cpp               |    2 +-
 .../VirtualFluids_GPU/Input/kFullReader.cpp   |    2 +-
 .../Interface_OpenFOAM/BoundaryQs.cpp         |  318 --
 .../Interface_OpenFOAM/BoundaryQs.h           |   44 -
 .../Interface_OpenFOAM/BoundaryValues.cpp     |  243 --
 .../Interface_OpenFOAM/BoundaryValues.h       |   26 -
 .../Interface_OpenFOAM/CoordNeighborGeoV.cpp  |  201 --
 .../Interface_OpenFOAM/CoordNeighborGeoV.h    |   36 -
 .../Interface_OpenFOAM/Interface.cpp          | 2879 -----------------
 .../Interface_OpenFOAM/Interface.h            |   37 -
 .../Interface_OpenFOAM/MeasuredPoints.cpp     |   59 -
 .../Interface_OpenFOAM/MeasuredPoints.h       |   20 -
 .../Interface_OpenFOAM/OffsetScale.cpp        |  133 -
 .../Interface_OpenFOAM/OffsetScale.h          |   17 -
 .../Interface_OpenFOAM/Standard.h             |   13 -
 .../VirtualFluids_GPU/Output/FileWriter.cpp   |    2 +-
 .../Output/UnstructuredGridWriter.hpp         |    8 +-
 .../VirtualFluids_GPU/Parameter/Parameter.cpp |   24 +-
 .../gpu}/GridGenerator/CMakeLists.txt         |    2 +-
 .../StreetPointFinder/JunctionReader.cpp      |    0
 .../StreetPointFinder/JunctionReader.h        |    0
 .../StreetPointFinder/SinkReader.cpp          |    0
 .../StreetPointFinder/SinkReader.h            |    0
 .../StreetPointFinder/SourceReader.cpp        |    0
 .../StreetPointFinder/SourceReader.h          |    0
 .../StreetPointFinder/StreetPointFinder.cpp   |    0
 .../StreetPointFinder/StreetPointFinder.h     |    0
 .../StreetPointFinder/package.include         |    0
 .../GridGenerator/geometries/Arrow/Arrow.h    |    0
 .../geometries/Arrow/ArrowImp.cpp             |    0
 .../GridGenerator/geometries/Arrow/ArrowImp.h |    0
 .../geometries/Arrow/package.include          |    0
 .../geometries/BoundingBox/BoundingBox.cu     |    0
 .../geometries/BoundingBox/BoundingBox.h      |    0
 .../BoundingBox/BoundingBoxTest.cpp           |    0
 .../geometries/BoundingBox/package.include    |    0
 .../geometries/Conglomerate/Conglomerate.cu   |    0
 .../geometries/Conglomerate/Conglomerate.h    |    0
 .../geometries/Conglomerate/package.include   |    0
 .../GridGenerator/geometries/Cuboid/Cuboid.cu |    0
 .../GridGenerator/geometries/Cuboid/Cuboid.h  |    0
 .../geometries/Cuboid/package.include         |    0
 .../gpu}/GridGenerator/geometries/Object.cu   |    0
 .../gpu}/GridGenerator/geometries/Object.h    |    0
 .../GridGenerator/geometries/Point/Point.cpp  |    0
 .../GridGenerator/geometries/Point/Point.h    |    0
 .../geometries/Point/package.include          |    0
 .../GridGenerator/geometries/Sphere/Sphere.cu |    0
 .../GridGenerator/geometries/Sphere/Sphere.h  |    0
 .../geometries/Sphere/package.include         |    0
 .../geometries/Triangle/Triangle.cu           |    0
 .../geometries/Triangle/Triangle.h            |    0
 .../geometries/Triangle/TriangleException.h   |    0
 .../geometries/Triangle/package.include       |    0
 .../TriangularMesh/TriangularMesh.cu          |    0
 .../TriangularMesh/TriangularMesh.h           |    0
 .../TriangularMesh/TriangularMeshStrategy.cpp |    0
 .../TriangularMesh/TriangularMeshStrategy.h   |    0
 .../geometries/TriangularMesh/package.include |    0
 .../TriangleNeighborFinder.cpp                |    0
 .../TriangleNeighborFinder.h                  |    0
 .../triangleNeighborFinder/package.include    |    0
 .../triangleRefinement/TriangleRefinement.cpp |    0
 .../triangleRefinement/TriangleRefinement.h   |    0
 .../triangleRefinement/package.include        |    0
 .../GridGenerator/geometries/Vertex/Vertex.cu |    0
 .../GridGenerator/geometries/Vertex/Vertex.h  |    0
 .../geometries/Vertex/package.include         |    0
 .../VerticalCylinder/VerticalCylinder.cu      |    0
 .../VerticalCylinder/VerticalCylinder.h       |    0
 .../VerticalCylinder/package.include          |    0
 .../GridGenerator/geometries/package.include  |    0
 {gpu/src => src/gpu}/GridGenerator/global.h   |    0
 .../BoundaryConditions/BoundaryCondition.cpp  |    0
 .../BoundaryConditions/BoundaryCondition.h    |    0
 .../grid/BoundaryConditions/Side.cpp          |    0
 .../grid/BoundaryConditions/Side.h            |    0
 .../grid/BoundaryConditions/package.include   |    0
 .../src => src/gpu}/GridGenerator/grid/Cell.h |    0
 .../gpu}/GridGenerator/grid/Field.cu          |    0
 .../gpu}/GridGenerator/grid/Field.h           |    0
 .../src => src/gpu}/GridGenerator/grid/Grid.h |    0
 .../grid/GridBuilder/GridBuilder.h            |    0
 .../grid/GridBuilder/LevelGridBuilder.cpp     |    0
 .../grid/GridBuilder/LevelGridBuilder.h       |    0
 .../grid/GridBuilder/MultipleGridBuilder.cpp  |    0
 .../grid/GridBuilder/MultipleGridBuilder.h    |    0
 .../grid/GridBuilder/package.include          |    0
 .../gpu}/GridGenerator/grid/GridFactory.cpp   |    0
 .../gpu}/GridGenerator/grid/GridFactory.h     |    0
 .../gpu}/GridGenerator/grid/GridImp.cu        |    0
 .../gpu}/GridGenerator/grid/GridImp.h         |    0
 .../gpu}/GridGenerator/grid/GridInterface.cu  |    0
 .../gpu}/GridGenerator/grid/GridInterface.h   |    0
 .../GridCpuStrategy/GridCpuStrategy.cpp       |    0
 .../GridCpuStrategy/GridCpuStrategy.h         |    0
 .../GridCpuStrategy/package.include           |    0
 .../GridGpuStrategy/GridGpuStrategy.cpp       |    0
 .../GridGpuStrategy/GridGpuStrategy.h         |    0
 .../GridGpuStrategy/package.include           |    0
 .../grid/GridStrategy/GridStrategy.h          |    0
 .../grid/GridStrategy/package.include         |    0
 .../gpu}/GridGenerator/grid/NodeValues.h      |    0
 .../GridGenerator/grid/distributions/D3Q13.h  |    0
 .../GridGenerator/grid/distributions/D3Q19.h  |    0
 .../GridGenerator/grid/distributions/D3Q27.h  |    0
 .../GridGenerator/grid/distributions/D3Q7.h   |    0
 .../grid/distributions/Distribution.cpp       |    0
 .../grid/distributions/Distribution.h         |    0
 .../grid/distributions/package.include        |    0
 .../GridGenerator/grid/kernel/package.include |    0
 .../grid/kernel/runGridKernelGPU.cu           |    0
 .../grid/kernel/runGridKernelGPU.cuh          |    0
 .../gpu}/GridGenerator/grid/package.include   |    0
 .../grid/partition/Partition.cpp              |    0
 .../GridGenerator/grid/partition/Partition.h  |    0
 .../grid/partition/package.include            |    0
 .../io/GridVTKWriter/GridVTKWriter.cpp        |    0
 .../io/GridVTKWriter/GridVTKWriter.h          |    0
 .../io/GridVTKWriter/package.include          |    0
 .../gpu}/GridGenerator/io/QLineWriter.cpp     |    0
 .../gpu}/GridGenerator/io/QLineWriter.h       |    0
 .../io/STLReaderWriter/STLReader.cpp          |    0
 .../io/STLReaderWriter/STLReader.h            |    0
 .../io/STLReaderWriter/STLWriter.cpp          |    0
 .../io/STLReaderWriter/STLWriter.h            |    0
 .../io/STLReaderWriter/package.include        |    0
 .../SimulationFileNames.cpp                   |    0
 .../SimulationFileNames.h                     |    0
 .../SimulationFileWriter.cpp                  |    0
 .../SimulationFileWriter.h                    |    0
 .../io/SimulationFileWriter/package.include   |    0
 .../PolyDataWriterWrapper.cpp                 |    0
 .../VTKWriterWrapper/PolyDataWriterWrapper.h  |    0
 .../UnstructuredGridWrapper.cpp               |    0
 .../UnstructuredGridWrapper.h                 |    0
 .../io/VTKWriterWrapper/package.include       |    0
 .../gpu}/GridGenerator/io/package.include     |    0
 .../gpu}/GridGenerator/package.include        |    0
 .../GridGenerator/utilities/communication.h   |    0
 .../utilities/cuda/CudaErrorCheck.cu          |    0
 .../utilities/cuda/LaunchParameter.cu         |    0
 .../utilities/cuda/LaunchParameter.cuh        |    0
 .../utilities/cuda/cudaDefines.h              |    0
 .../utilities/cuda/cudaKernelCall.h           |    0
 .../utilities/cuda/package.include            |    0
 .../gpu}/GridGenerator/utilities/math/Math.cu |    0
 .../gpu}/GridGenerator/utilities/math/Math.h  |    0
 .../utilities/math/package.include            |    0
 .../GridGenerator/utilities/package.include   |    0
 .../transformator/ArrowTransformator.cpp      |    0
 .../transformator/ArrowTransformator.h        |    0
 .../utilities/transformator/Transformator.cpp |    0
 .../utilities/transformator/Transformator.h   |    0
 .../transformator/TransformatorImp.cpp        |    0
 .../transformator/TransformatorImp.h          |    0
 .../utilities/transformator/package.include   |    0
 163 files changed, 80 insertions(+), 4059 deletions(-)
 create mode 100644 gpu/src/VirtualFluids_GPU/CMakeLists.txt
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryQs.cpp
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryQs.h
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryValues.cpp
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryValues.h
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/CoordNeighborGeoV.cpp
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/CoordNeighborGeoV.h
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Interface.cpp
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Interface.h
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/MeasuredPoints.cpp
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/MeasuredPoints.h
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/OffsetScale.cpp
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/OffsetScale.h
 delete mode 100644 gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Standard.h
 rename {gpu/src => src/gpu}/GridGenerator/CMakeLists.txt (98%)
 rename {gpu/src => src/gpu}/GridGenerator/StreetPointFinder/JunctionReader.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/StreetPointFinder/JunctionReader.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/StreetPointFinder/SinkReader.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/StreetPointFinder/SinkReader.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/StreetPointFinder/SourceReader.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/StreetPointFinder/SourceReader.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/StreetPointFinder/StreetPointFinder.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/StreetPointFinder/StreetPointFinder.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/StreetPointFinder/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Arrow/Arrow.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Arrow/ArrowImp.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Arrow/ArrowImp.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Arrow/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/BoundingBox/BoundingBox.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/BoundingBox/BoundingBox.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/BoundingBox/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Conglomerate/Conglomerate.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Conglomerate/Conglomerate.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Conglomerate/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Cuboid/Cuboid.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Cuboid/Cuboid.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Cuboid/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Object.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Object.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Point/Point.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Point/Point.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Point/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Sphere/Sphere.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Sphere/Sphere.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Sphere/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Triangle/Triangle.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Triangle/Triangle.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Triangle/TriangleException.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Triangle/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/TriangularMesh.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/TriangularMesh/triangleRefinement/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Vertex/Vertex.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Vertex/Vertex.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/Vertex/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/VerticalCylinder/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/geometries/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/global.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/BoundaryConditions/Side.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/BoundaryConditions/Side.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/BoundaryConditions/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/Cell.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/Field.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/Field.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/Grid.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridBuilder/GridBuilder.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridBuilder/LevelGridBuilder.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridBuilder/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridFactory.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridFactory.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridImp.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridImp.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridInterface.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridInterface.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridStrategy/GridCpuStrategy/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridStrategy/GridGpuStrategy/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridStrategy/GridStrategy.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/GridStrategy/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/NodeValues.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/distributions/D3Q13.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/distributions/D3Q19.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/distributions/D3Q27.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/distributions/D3Q7.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/distributions/Distribution.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/distributions/Distribution.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/distributions/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/kernel/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/kernel/runGridKernelGPU.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/kernel/runGridKernelGPU.cuh (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/partition/Partition.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/partition/Partition.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/grid/partition/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/GridVTKWriter/GridVTKWriter.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/GridVTKWriter/GridVTKWriter.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/GridVTKWriter/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/QLineWriter.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/QLineWriter.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/STLReaderWriter/STLReader.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/STLReaderWriter/STLReader.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/STLReaderWriter/STLWriter.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/STLReaderWriter/STLWriter.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/STLReaderWriter/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/SimulationFileWriter/SimulationFileNames.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/SimulationFileWriter/SimulationFileNames.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/SimulationFileWriter/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/VTKWriterWrapper/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/io/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/communication.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/cuda/CudaErrorCheck.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/cuda/LaunchParameter.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/cuda/LaunchParameter.cuh (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/cuda/cudaDefines.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/cuda/cudaKernelCall.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/cuda/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/math/Math.cu (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/math/Math.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/math/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/package.include (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/transformator/ArrowTransformator.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/transformator/ArrowTransformator.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/transformator/Transformator.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/transformator/Transformator.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/transformator/TransformatorImp.cpp (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/transformator/TransformatorImp.h (100%)
 rename {gpu/src => src/gpu}/GridGenerator/utilities/transformator/package.include (100%)

diff --git a/CMake/3rd/boost.cmake b/CMake/3rd/boost.cmake
index 0426ff8f0..fae5cdf65 100644
--- a/CMake/3rd/boost.cmake
+++ b/CMake/3rd/boost.cmake
@@ -20,5 +20,5 @@ macro(linkBoost components)
   vf_get_library_name(library_name)
   find_package( Boost REQUIRED COMPONENTS ${components})
   target_include_directories(${library_name} PRIVATE ${Boost_INCLUDE_DIR})
-  target_link_libraries(${library_name} ${Boost_LIBRARIES})
+  target_link_libraries(${library_name} PRIVATE ${Boost_LIBRARIES})
 endmacro(linkBoost)
diff --git a/CMake/3rd/mpi.cmake b/CMake/3rd/mpi.cmake
index b3e9724f4..9cfe89dc9 100644
--- a/CMake/3rd/mpi.cmake
+++ b/CMake/3rd/mpi.cmake
@@ -5,5 +5,5 @@ vf_get_library_name(library_name)
 find_package(MPI REQUIRED)
 target_include_directories(${library_name} PRIVATE ${MPI_C_INCLUDE_PATH})
 
-target_link_libraries(${library_name} ${MPI_C_LIBRARIES})
+target_link_libraries(${library_name} PRIVATE ${MPI_C_LIBRARIES})
 
diff --git a/gpu.cmake b/gpu.cmake
index 66b478204..da629b7c8 100644
--- a/gpu.cmake
+++ b/gpu.cmake
@@ -82,7 +82,7 @@ ENDIF(MSVC)
 ###                         OPTIONS                       ###
 #############################################################
 option(BUILD_SHARED_LIBS        "Build shared libraries"      ON )
-option(VF.BUILD_VF_GPU          "Build VirtualFluids GPU"     OFF )
+option(VF.BUILD_VF_GPU          "Build VirtualFluids GPU"     ON )
 option(VF.BUILD_VF_GKS          "Build VirtualFluids GKS"     OFF )
 option(VF.BUILD_VF_TRAFFIC      "Build VirtualFluids Traffic" OFF)
 option(VF.BUILD_JSONCPP         "Builds json cpp "            OFF)
@@ -126,7 +126,7 @@ set(CMAKE_CUDA_FLAGS_DEBUG " -G" CACHE STRING "" FORCE)
 ###                  Core                                 ###
 #############################################################
 
-add_subdirectory(gpu/src/GridGenerator)
+add_subdirectory(src/gpu/GridGenerator)
 #add_subdirectory(3rdParty/metis/metis-5.1.0)
 
 #############################################################
@@ -134,17 +134,18 @@ add_subdirectory(gpu/src/GridGenerator)
 #############################################################
 
 IF (VF.BUILD_VF_GPU)
-    add_subdirectory(targets/libs/VirtualFluids_GPU)
+    add_subdirectory(gpu/src/VirtualFluids_GPU)
 
     #add_subdirectory(targets/apps/LBM/lbmTest)
     #add_subdirectory(targets/apps/LBM/metisTest)
     #add_subdirectory(targets/apps/LBM/Basel)
     #add_subdirectory(targets/apps/LBM/BaselNU)
     #add_subdirectory(targets/apps/LBM/BaselMultiGPU)
-    add_subdirectory(targets/apps/LBM/DrivenCavity)
-    add_subdirectory(targets/apps/LBM/gridGeneratorTest)
-    add_subdirectory(targets/apps/LBM/TGV_3D)
-    add_subdirectory(targets/apps/LBM/TGV_3D_MultiGPU)
+
+    #add_subdirectory(targets/apps/LBM/DrivenCavity)
+    #add_subdirectory(targets/apps/LBM/gridGeneratorTest)
+    #add_subdirectory(targets/apps/LBM/TGV_3D)
+    #add_subdirectory(targets/apps/LBM/TGV_3D_MultiGPU)
 ELSE()
     MESSAGE( STATUS "exclude Virtual Fluids GPU." )
 ENDIF()
diff --git a/gpu/src/VirtualFluids_GPU/CMakeLists.txt b/gpu/src/VirtualFluids_GPU/CMakeLists.txt
new file mode 100644
index 000000000..6f1f63866
--- /dev/null
+++ b/gpu/src/VirtualFluids_GPU/CMakeLists.txt
@@ -0,0 +1,46 @@
+#include (${CMAKE_SOURCE_DIR}/${cmakeMacroPath}/Cuda/Link.cmake)
+#linkCuda(${targetName})
+#include (${CMAKE_SOURCE_DIR}/${cmakeMacroPath}/MPI/Link.cmake)
+#linkMPI(${targetName})
+#include (${CMAKE_SOURCE_DIR}/${cmakeMacroPath}/Boost/Link.cmake)
+#linkBoost(${targetName} "serialization")
+
+
+IF(MSVC)
+    set(libsToLink ws2_32 GridGenerator basics Traffic) # ws_32 throws an error on Phoenix
+ELSE(MSVC)
+    #set(libsToLink GridGenerator VirtualFluidsBasics Core Traffic)
+    set(libsToLink GridGenerator basics)
+ENDIF(MSVC)
+
+
+vf_add_library(BUILDTYPE shared DEPENDS ${libsToLink})
+
+include (${CMAKE_PATH}/3rd/cuda.cmake)
+include (${CMAKE_PATH}/3rd/mpi.cmake)
+include (${CMAKE_PATH}/3rd/boost.cmake)
+linkBoost ("serialization")
+
+vf_get_library_name(library_name)
+target_include_directories(${library_name} PRIVATE "${CMAKE_SOURCE_DIR}/src/basics")
+target_include_directories(${library_name} PRIVATE "${CMAKE_SOURCE_DIR}/src/gpu")
+target_include_directories(${library_name} PRIVATE "${CMAKE_SOURCE_DIR}/src/gpu/GridGenerator")
+target_include_directories(${library_name} PRIVATE "${CMAKE_SOURCE_DIR}/src/basics/Core")
+
+
+
+#set(includeDirectories ${CMAKE_SOURCE_DIR}/src/${targetName}
+#        ${CMAKE_SOURCE_DIR}/src
+#        ${CMAKE_SOURCE_DIR}/src/GridGenerator
+#        ${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics
+#        ${CMAKE_SOURCE_DIR}/src/Core
+#        ${CMAKE_SOURCE_DIR}/src/Traffic
+#        )
+
+#SET(TPN_WIN32 "/EHsc")
+#https://stackoverflow.com/questions/6832666/lnk2019-when-including-asio-headers-solution-generated-with-cmake
+#https://stackoverflow.com/questions/27442885/syntax-error-with-stdnumeric-limitsmax
+
+IF(MSVC)
+    set_target_properties(${library_name} PROPERTIES LINK_FLAGS "/ignore:4251")
+ENDIF(MSVC)
diff --git a/gpu/src/VirtualFluids_GPU/Calculation/ForceCalculations.h b/gpu/src/VirtualFluids_GPU/Calculation/ForceCalculations.h
index bed273e99..3f69a6119 100644
--- a/gpu/src/VirtualFluids_GPU/Calculation/ForceCalculations.h
+++ b/gpu/src/VirtualFluids_GPU/Calculation/ForceCalculations.h
@@ -2,7 +2,7 @@
 #define FORCE_CALCULATIONS_H
 
 #include "Parameter/Parameter.h"
-#include "VirtualFluidsBasics/basics/utilities/UbSystem.h"
+#include "basics/utilities/UbSystem.h"
 
 #include <iostream>
 #include <stdio.h>
diff --git a/gpu/src/VirtualFluids_GPU/Input/PositionReader.cpp b/gpu/src/VirtualFluids_GPU/Input/PositionReader.cpp
index ff8f88d99..82a4dd9ea 100644
--- a/gpu/src/VirtualFluids_GPU/Input/PositionReader.cpp
+++ b/gpu/src/VirtualFluids_GPU/Input/PositionReader.cpp
@@ -1,6 +1,6 @@
 #include "PositionReader.h"
 
-#include "VirtualFluidsBasics/basics/utilities/UbFileInputASCII.h"
+#include "basics/utilities/UbFileInputASCII.h"
 
 static const int E    = dirE;		   //static const int E    = 0;
 static const int W    = dirW;		   //static const int W    = 1;
@@ -89,7 +89,7 @@ const int INVDIR[] = {	INV_E,
 						INV_ZERO,			//INV_BSW = TNE  = 18 = dirZERO = ZERO= INV_ZERO
 						INV_TNE};			//INV_ZERO= ZERO = 26 = dirBSW  = BSW = INV_TNE
 
-static const int        optionDigits = 2;  //--> 2 bits für secondary Option
+static const int        optionDigits = 2;  //--> 2 bits f�r secondary Option
 static const long long  maxOptionVal = ( 1<<optionDigits ) - 1; //2^3-1 -> 7
 float q[27]; 
 long long noslipBoundaryFlags;		
@@ -494,7 +494,7 @@ void PositionReader::readFileNoSlipBcQs(const std::string fileName, Parameter* p
 			//	test = 100.;
 			//}
 			
-			////TÄST -> shit
+			////T�ST -> shit
 			//para->getParH(level)->QWall.qread[u] = 0.5f;
 			//orig
 			para->getParH(level)->QWall.qread[u] = test;
diff --git a/gpu/src/VirtualFluids_GPU/Input/VtkGeometryReader.cpp b/gpu/src/VirtualFluids_GPU/Input/VtkGeometryReader.cpp
index 2bb49c5c2..39cbde1d8 100644
--- a/gpu/src/VirtualFluids_GPU/Input/VtkGeometryReader.cpp
+++ b/gpu/src/VirtualFluids_GPU/Input/VtkGeometryReader.cpp
@@ -1,6 +1,6 @@
 #include "VtkGeometryReader.h"
 
-#include "VirtualFluidsBasics/basics/utilities/UbFileInputASCII.h"
+#include "basics/utilities/UbFileInputASCII.h"
 
 void VtkGeometryReader::readFile(const std::string& fileName, unsigned int* geoMat)
 {
diff --git a/gpu/src/VirtualFluids_GPU/Input/kFullReader.cpp b/gpu/src/VirtualFluids_GPU/Input/kFullReader.cpp
index fe738fda1..69f20d48d 100644
--- a/gpu/src/VirtualFluids_GPU/Input/kFullReader.cpp
+++ b/gpu/src/VirtualFluids_GPU/Input/kFullReader.cpp
@@ -1,6 +1,6 @@
 #include "kFullReader.h"
 
-#include "VirtualFluidsBasics/basics/utilities/UbFileInputASCII.h"
+#include "basics/utilities/UbFileInputASCII.h"
 
 void kFullReader::readFileForAlloc(const std::string fileName, Parameter* para)
 {
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryQs.cpp b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryQs.cpp
deleted file mode 100644
index 74997af0b..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryQs.cpp
+++ /dev/null
@@ -1,318 +0,0 @@
-#include "BoundaryQs.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-using namespace std;
-
-
-BoundaryQs::BoundaryQs(string ad, bool binaer)
-{
-
-	if(binaer == true) {
-		file.open(ad.c_str(), ios::in | ios::binary);
-
-		if (!file) {
-		cerr << "Fehler beim Oeffnen_Qs" <<endl;
-			exit(1);
-		}
-
-		init_Binary();
-	} else {
-		file.open(ad.c_str(), ios::in );
-
-		if (!file) {
-		cerr << "Fehler beim Oeffnen_Qs" <<endl;
-			exit(1);
-		}
-
-		init();
-		
-	}
-}
-BoundaryQs::BoundaryQs(string ad, Parameter* para, string str, bool binaer){
-
-	if (binaer==true) file.open(ad.c_str(), ios::in | ios::binary);
-	else file.open(ad.c_str(), ios::in);
-
-	if (!file) {
-		para->setObj(str, false);
-	} else {
-		if(binaer == true) {
-			init_Binary();
-		} else {
-			init();
-		}
-		para->setObj(str, true);
-	}
-	
-}
-BoundaryQs::BoundaryQs(){
-}
-
-
-
-BoundaryQs::~BoundaryQs(void)
-{
-	file.close();
-}
-
-void BoundaryQs::init() {
-	vector<uint32_t> vec1D_code;
-
-	file.clear();
-	file.seekg(0, ios::beg);
-	string bufferString;
-	unsigned int bufferInt;
-	doubflo bufferDouble;
-
-
-	getline(file, bufferString); //level einlesen
-	level = atoi(bufferString.c_str());
-	column = 27;
-	vec_Size.resize(level + 1);
-	vec3D_data.resize(level + 1);
-	vec2D_index.resize(level + 1);
-
-
-	//schleife zum Einlesen der Werte
-	for (unsigned int j = 0; j <= level; j++) {
-		vec3D_data[j].resize(column);
-		getline(file, bufferString);
-		bufferInt = atoi(bufferString.c_str()); //eingelesene Zeile wird zum Integer gecastet
-		vec_Size[j] = bufferInt;
-		for (int i = 0; i < column; i++) {
-			vec3D_data[j][i].resize(vec_Size[j], -1);
-		}
-		vec2D_index[j].resize(vec_Size[j]);
-		if (bufferInt == 0) {//falls die Groesse Null ist, muss keine Zeile uebersprungen werden
-			continue;
-		}
-		vec1D_code.resize(vec_Size[j]);
-
-		for (unsigned int elem = 0; elem < vec_Size[j]; elem++)
-		{
-
-			
-			
-			int zaehler = 26;
-			file >> bufferInt;
-			vec2D_index[j][elem] = bufferInt;
-			//cout << "Index: " << bufferInt << endl;
-
-			bufferInt = atoi(bufferString.c_str());
-			file >> bufferInt;
-			vec1D_code[elem] = bufferInt;
-			//cout << vec1D_code[elem] << endl;
-			//getline(file, bufferString); // Code ueberspringen
-
-			while (vec1D_code[elem] != 0){
-
-				if (vec1D_code[elem] % 2 == 1){
-
-					file >> bufferDouble;
-
-					vec3D_data[j][zaehler][elem] = bufferDouble;
-				}
-				vec1D_code[elem] /= 2;
-				zaehler--;
-			}
-			getline(file, bufferString);
-
-		}
-
-		vec1D_code.clear();
-	}// ende for-schleife zum Einlesen der Werte
-
-}
-
-
-
-void BoundaryQs::init_Binary() {
-
-	vector<uint32_t> vec1D_code;
-
-	file.clear();
-	file.seekg(0, ios::beg);
-	string bufferString;
-	unsigned int bufferInt;
-	doubflo bufferDouble;
-	uint32_t bufferUint32_t;
-
-
-	getline(file, bufferString); //level einlesen
-	level = atoi(bufferString.c_str());
-	column = 27;
-	vec_Size.resize(level + 1);
-	vec3D_data.resize(level + 1);
-	vec2D_index.resize(level + 1);
-
-	for (unsigned int j = 0; j <= level; j++) {
-		vec3D_data[j].resize(column);
-		getline(file, bufferString);
-		bufferInt = atoi(bufferString.c_str()); 
-		vec_Size[j] = bufferInt;
-		for (int i = 0; i < column; i++) {
-			vec3D_data[j][i].resize(vec_Size[j], -1);
-		}
-		vec2D_index[j].resize(vec_Size[j]);
-		if (bufferInt == 0) {//falls die Groesse Null ist, muss keine Zeile uebersprungen werden
-			continue;
-		}
-		vec1D_code.resize(vec_Size[j]);
-
-		for (unsigned int elem = 0; elem < vec_Size[j]; elem++)
-		{
-		int zaehler = 26;
-		file.read((char*)&bufferInt,sizeof(int));
-		vec2D_index[j][elem] = bufferInt;
-		
-
-		file.read((char*)&bufferUint32_t,sizeof(uint32_t));
-		vec1D_code[elem] = bufferUint32_t;
-		while (vec1D_code[elem] != 0){
-
-				if (vec1D_code[elem] % 2 == 1){
-
-					file.read((char*)&bufferDouble,sizeof(double));
-					vec3D_data[j][zaehler][elem] = bufferDouble;
-				}
-				vec1D_code[elem] /= 2;
-				zaehler--;
-		}
-		getline(file, bufferString);
-		}
-		vec1D_code.clear();
-	}
-}
-
-vector<vector<vector<doubflo> > > BoundaryQs::setgetBoundarys(vector<vector<vector<doubflo> > > qs) {
-
-	int j=0;
-	int i=0;
-	for (vector<vector<vector<doubflo> > >::iterator it = vec3D_data.begin() ; it != vec3D_data.end(); it++) {
-		i = 0;
-		for(vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-			
-			for(vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-				qs[j][i].push_back(*it3);
-			}
-			i++;
-		}
-		j++;
-	}
-	vec3D_data.clear();
-
-	return qs;
-}
-
-vector<vector<vector<unsigned int> > > BoundaryQs::setgetBoundarys(vector<vector<vector<unsigned int> > > qs) {
-
-	cout << "Laenge 1 vec3D_data: " << vec3D_data.size() << endl;
-	cout << "Laenge 2 vec3D_data: " << vec3D_data[0].size() << endl;
-	cout << "Laenge 3 vec3D_data: " << vec3D_data[0][0].size() << endl;	
-	int j = 0;
-	int i = 0;
-	for (vector<vector<vector<doubflo> > >::iterator it = vec3D_data.begin(); it != vec3D_data.end(); it++) {
-		i = 0;
-		for (vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-
-			for (vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-				qs[j][i].push_back(*it3);
-			}
-			i++;
-		}
-		j++;
-	}
-	vec3D_data.clear();
-
-	return qs;
-}
-
-
-
-
-vector<vector<unsigned int> > BoundaryQs::setgetIndex(vector<vector<unsigned int> > index) {
-
-	int i=0;
-
-		for(vector<vector<unsigned int> >::iterator it2 = vec2D_index.begin(); it2 != vec2D_index.end(); it2++){
-
-			for(vector<unsigned int>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-				if(*it3!=0) {
-					index[i].push_back(*it3);
-				}
-			}
-			i++;
-		}
-
-	vec2D_index.clear();
-	return index;
-}
-
-void BoundaryQs::initArray(doubflo* ptr, unsigned int level, unsigned int column) {
-	int zaehler=0;
-	int zaehler2=0;
-	int n=0;
-	if (ptr != NULL) { //nur wenn genug Speicher vorhanden ist
-		for (vector<vector<vector<doubflo> > >::iterator it = vec3D_data.begin() ; it != vec3D_data.end(); it++) {
-			if(zaehler==level) {
-				for(vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-					if(zaehler2==column) {
-						for(vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-						ptr[n]=*it3;
-						n++;
-						}
-					}
-					zaehler2++; // zaehlt die Spalte mit
-				}				
-			}
-			zaehler++; // zaehlt das Level mit
-		}
-		
-	}
-}
-
-void BoundaryQs::initIndex(/*unsigned*/ int *ptr, unsigned int level) {
-	int zaehler = 0;
-	unsigned int n=0;
-	if (ptr !=NULL) {
-		for (vector<vector<unsigned int> >::iterator it = vec2D_index.begin() ; it != vec2D_index.end(); it++) {
-			if ( zaehler==level) {
-				for(vector<unsigned int>::iterator it2 = it->begin(); it2 != it->end(); it2++) {
-					ptr[n]=*it2;
-					n++;
-				}
-			}
-			zaehler++;
-		}
-	}
-}
-
-void BoundaryQs::initProcNeighbor(int* ptr, unsigned int level, unsigned int column) {
-	int zaehler=0;
-	int zaehler2=0;
-	int n=0;
-	if (ptr != NULL) { //nur wenn genug Speicher vorhanden ist
-		for (vector<vector<vector<doubflo> > >::iterator it = vec3D_data.begin() ; it != vec3D_data.end(); it++) {
-			if(zaehler==level) {
-				for(vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-					if(zaehler2==column) {
-						for(vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-							ptr[n]=(int)*it3;
-							n++;
-						}
-					}
-					zaehler2++; // zaehlt die Spalte mit
-				}				
-			}
-			zaehler++; // zaehlt das Level mit
-		}
-
-	}
-}
-
-int BoundaryQs::getcolumn(){
-	return this->column;
-}
-
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryQs.h b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryQs.h
deleted file mode 100644
index ed333d46b..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryQs.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#pragma once
-#include "Standard.h"
-#include "CoordNeighborGeoV.h"
-#include "Parameter/Parameter.h"
-
-using namespace std;
-
-class BoundaryQs
-	:public CoordNeighborGeoV
-{
-protected:
-	vector<doubflo> vec1D_column;
-	vector< vector<doubflo> >vec2D_lvl;
-	vector< vector<vector<doubflo> > >vec3D_data;
-
-
-	vector<unsigned int> vec1D_index;
-	vector< vector<unsigned int> >vec2D_index;
-
-	string boun;
-	int column;
-
-public:
-	BoundaryQs();
-	BoundaryQs(string q, bool binaer);
-	BoundaryQs(string q, Parameter* para, string str, bool binaer);
-	~BoundaryQs(void);
-	void init();
-	void init_Binary();
-
-	void init_shortQs();
-
-	void initArray(doubflo* ptr, unsigned int level, unsigned int column);
-	void initProcNeighbor(int* ptr, unsigned int level, unsigned int column);
-	void initIndex(/*unsigned*/ int *ptr, unsigned int level);
-
-	vector<vector<vector<doubflo> > > setgetBoundarys(vector<vector<vector<doubflo> > > qs);
-	vector<vector<vector<unsigned int> > > setgetBoundarys(vector<vector<vector<unsigned int> > > qs);
-	vector<vector<unsigned int> > setgetIndex(vector<vector<unsigned int> > index);
-	int getcolumn();
-
-	void sout();
-};
-
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryValues.cpp b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryValues.cpp
deleted file mode 100644
index 05bf4d1f5..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryValues.cpp
+++ /dev/null
@@ -1,243 +0,0 @@
-#include "BoundaryValues.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-
-BoundaryValues::BoundaryValues(string ad)
-{
-	file.open(ad.c_str(), ios::in);
-
-	if (!file) {
-		cerr << "Fehler beim Oeffnen_Values" <<endl;
-			exit(1);
-	}
-	init();
-}
-
-
-BoundaryValues::BoundaryValues(string ad, Parameter* para, string str)
-{
-	if (!file) {
-		cerr << "Fehler beim Oeffnen_Values" <<endl;
-		exit(1);
-	}
-
-
-	file.open(ad.c_str(), ios::in);
-	if (!file) {
-		para->setObj(str, false);
-	} else {
-		init();
-		para->setObj(str, true);
-	}
-}
-
-
-BoundaryValues::BoundaryValues(int neighbor, Parameter* para, string sor)
-{
-	string ad = para->getPossNeighborFiles(sor)[neighbor];
-	file.open(ad.c_str(), ios::in);
-
-	if (!file) {
-		para->setIsNeighbor(false);
-	} else {
-		para->setIsNeighbor(true);
-		init();
-	}
-}
-
-
-BoundaryValues::BoundaryValues(int neighbor, Parameter* para, string sor, string dir)
-{
-	if (dir=="X")
-	{
-		string ad = para->getPossNeighborFilesX(sor)[neighbor];
-		file.open(ad.c_str(), ios::in);
-
-		if (file.fail()) {
-			para->setIsNeighborX(false);
-		} else {
-			para->setIsNeighborX(true);
-			init();
-		}
-	} 
-	else if (dir=="Y")
-	{
-		string ad = para->getPossNeighborFilesY(sor)[neighbor];
-		file.open(ad.c_str(), ios::in);
-
-		if (file.fail()) {
-			para->setIsNeighborY(false);
-		} else {
-			para->setIsNeighborY(true);
-			init();
-		}
-	}
-	else
-	{
-		string ad = para->getPossNeighborFilesZ(sor)[neighbor];
-		file.open(ad.c_str(), ios::in);
-
-		if (file.fail()) {
-			para->setIsNeighborZ(false);
-		} else {
-			para->setIsNeighborZ(true);
-			init();
-		}
-	}
-}
-
-
-BoundaryValues::~BoundaryValues(void)
-{
-	file.close();
-}
-
-void BoundaryValues::init() {
-
-	string bufferString;
-	unsigned int bufferInt;
-	doubflo bufferDouble;
-
-
-	getline(file,bufferString);
-	bo=bufferString; // "bo" speichert die Art der Randbedingung
-
-	getline(file,bufferString);//level einlesen
-	level = atoi(bufferString.c_str());
-	getline(file,bufferString);//ueberspringen der groesse
-
-	int counter = 0;
-	int laeuftmit = 0;
-	while(counter <= 0 && laeuftmit <= level) { //schleife laeuft bis spaltenanzahl gefunden wurde
-		getline(file, bufferString);
-		for(unsigned int i = 0; i < bufferString.length(); i++)
-		{
-			if (bufferString[i] == ' ')
-			{
-				counter++;
-			}
-		}
-		laeuftmit++;
-	}
-	int column = counter;
-	//cout << "column: " << column << endl;
-
-
-	if(bo=="noSlip"||bo=="slip") {
-
-		vec1D_index.push_back(0);
-		vec2D_index.push_back(vec1D_index);
-		vec1D_index.clear();
-
-		vec1D_column.push_back(0);
-		vec2D_lvl.push_back(vec1D_column); 
-		vec1D_column.clear(); 
-		vec3D_data.push_back(vec2D_lvl);
-		vec2D_lvl.clear();
-	}
-
-	else //if (bo == "velocity" || bo == "pressure" || bo == "periodic_x" || bo == "periodic_y" || bo == "periodic_z") {
-	{
-		file.clear();
-		file.seekg (0, ios::beg);
-		getline(file,bufferString); //Art wird uebersprungen
-		getline(file,bufferString); //level wird uebersprungen
-
-		////Levelgroessen aus der dritten Zeile werden eingelesen------------------------------------------------------------------//
-		for(unsigned int i=0; i<=level; i++) {
-			getline(file,bufferString);
-			bufferInt = atoi(bufferString.c_str()); //eingelesene Zeile wird zum Integer gecastet
-			vec_Size.push_back(bufferInt);
-			if(bufferInt!=0) {//falls die Groesse Null ist, muss keine Zeile uebersprungen werden
-				for(unsigned int j=0; j<bufferInt;j++){ 
-					getline(file,bufferString);// ueberspringt alles bis zur naechsten Groesse
-				}
-			}
-		}
-
-		//Index wird in den Values eingelesen------------------------------------------------------------------------------------//
-		file.clear();
-		file.seekg (0, ios::beg);
-		getline(file,bufferString); //Art wird uebersprungen
-		getline(file,bufferString); //level wird uebersprungen
-
-		vec3D_data.resize(level+1);
-		for (unsigned int i = 0; i < vec3D_data.size(); i++) {
-			vec3D_data[i].resize(column);
-			for (unsigned int j = 0; j < vec3D_data[i].size(); j++) {
-				vec3D_data[i][j].resize(vec_Size[i]);
-			}
-		}
-
-		vec2D_index.resize(level+1);
-		for (unsigned int i = 0; i < vec2D_index.size(); i++) {
-			vec2D_index[i].resize(vec_Size[i]);
-		}	
-
-		//schleife zum Einlesen der Werte
-		for (unsigned int j = 0; j <= level; j++) {
-			if(vec_Size[j]==0) {
-				getline(file,bufferString);
-				continue;
-			} //ist eine Groesse=0 -> continue
-
-			getline(file,bufferString); // Groesse ueberspringen
-			for (unsigned int elem = 0; elem < vec_Size[j]; elem++)
-			{
-				file >> bufferInt;
-				vec2D_index[j][elem]=bufferInt;
-				for (int col = 0; col < column; col++)
-				{
-					file >> bufferDouble;
-					vec3D_data[j][col][elem] = bufferDouble;
-				}
-			}
-			getline(file,bufferString);
-		} // ende for-schleife zum Einlesen der Werte
-	} // ende if
-}
-
-
-vector<unsigned int> BoundaryValues::getIndex(unsigned int level) {
-	int zaehler = 0;
-	for (vector<vector<unsigned int> >::iterator it = vec2D_index.begin() ; it != vec2D_index.end(); it++) {
-		if ( zaehler==level) {return *it;}
-		zaehler++;
-	}
-	cout<<"Levelgroesse nicht zulaessig"<<endl;
-	exit(1);
-}
-
-
-vector<doubflo> BoundaryValues::getVec(unsigned int level, unsigned int column) {
-	int zaehler1=0;
-	int zaehler2=0;
-
-	for (vector<vector<vector<doubflo> > >::iterator it = vec3D_data.begin() ; it != vec3D_data.end(); it++) {
-		if (zaehler1==level) { 
-			for(vector<vector<doubflo> >::iterator it2 = it->begin() ; it2 != it->end(); it2++) {
-				if(zaehler2==column) {return *it2;}
-				zaehler2++;
-			}
-		}	
-		zaehler1++;
-	}
-	cout<<"Levelgroesse nicht zulaessig"<<endl;
-	exit(1);
-}
-
-
-string BoundaryValues::getWay() {
-	return this->bo;
-}
-
-
-void BoundaryValues::setProcNeighbor(bool pN){
-	procNeighbor = pN;
-}
-
-
-bool BoundaryValues::getProcNeighbor(){
-	return procNeighbor;
-}
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryValues.h b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryValues.h
deleted file mode 100644
index b366c70df..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/BoundaryValues.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#pragma once
-#include "Standard.h"
-#include "BoundaryQs.h"
-
-class BoundaryValues
-	: public BoundaryQs
-{
-private:
-	string bo;
-	bool procNeighbor;
-
-public:
-	BoundaryValues(string ad);
-	BoundaryValues(string ad, Parameter* para, string str);
-	BoundaryValues(int neighbor, Parameter* para, string sor);
-	BoundaryValues(int neighbor, Parameter* para, string sor, string dir);
-	~BoundaryValues(void);
-	void init();
-	vector<unsigned int> getIndex(unsigned int level);
-	vector<doubflo> getVec(unsigned int level, unsigned int column);
-	string getWay();
-
-	void setProcNeighbor(bool pN);
-	bool getProcNeighbor();
-};
-
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/CoordNeighborGeoV.cpp b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/CoordNeighborGeoV.cpp
deleted file mode 100644
index f52d1b1b7..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/CoordNeighborGeoV.cpp
+++ /dev/null
@@ -1,201 +0,0 @@
-#include "CoordNeighborGeoV.h"
-#include <iomanip>
-#include <stdio.h>
-#include <stdlib.h>
-
-using namespace std;
-
-CoordNeighborGeoV::CoordNeighborGeoV(void){
-}
-
-CoordNeighborGeoV::CoordNeighborGeoV(string ad, bool binaer, bool coord){
-	file.open(ad.c_str(), ios::in | ios::binary);
-
-	if (!file) {
-		cerr << "Fehler beim Oeffnen_CoordNeighborGeo" <<endl;
-			exit(1);
-	}
-	if(binaer==true) {
-		init_Binary(coord);
-	} else {
-		init(coord);
-	}
-		
-}
-
-CoordNeighborGeoV::~CoordNeighborGeoV(){
-	file.close();
-}
-
-void CoordNeighborGeoV::init(bool coord) {
-	//Level aus der ersten Zeile wird eingelesen
-	string buffer;
-	unsigned int bufferInt;
-	doubflo bufferDoubflo;
-
-	getline(file,buffer);
-	level = atoi(buffer.c_str());
-
-	//Schleife zum Einlesen der Levelgroessen
-	for(unsigned int i=0; i<=level; i++) {
-		getline(file,buffer);
-		bufferInt = atoi(buffer.c_str()); //eingelesene Zeile wird zum Integer gecastet
-		vec_Size.push_back(bufferInt);
-		getline(file,buffer);
-	}
-	file.clear();
-	file.seekg (0, ios::beg); // file wird wieder auf den Anfang gesetzt
-	getline(file,buffer); //level wird ignoriert
-
-	
-	//einlesen der Werte
-	if(coord == true) {
-		vec2D_data_Coord.resize(level+1);
-		for(unsigned lvl = 0; lvl <= level; lvl++){
-			getline(file,buffer); // Groesse ignorieren
-			for (unsigned int i = 0; i <= vec_Size[lvl]; i++)
-			{
-				file >> bufferDoubflo;
-				vec2D_data_Coord[lvl].push_back(bufferDoubflo);
-			}
-			getline(file, buffer);
-		}
-	} else {
-		vec2D_data.resize(level+1);
-		for(unsigned lvl = 0; lvl <= level; lvl++){
-			getline(file,buffer); // Groesse ignorieren
-			for (unsigned int i = 0; i <= vec_Size[lvl]; i++)
-			{
-				file >> bufferInt;
-				vec2D_data[lvl].push_back(bufferInt);
-			}
-			getline(file, buffer);
-		}
-	} // ende else
-} // ende methode
-
-
-void CoordNeighborGeoV::init_Binary(bool coord) {
-	char c;
-	string buffer;
-	unsigned int bufferInt;
-	double bufferDoubflo;
-
-	//level einlesen
-	getline(file,buffer);
-	level = atoi(buffer.c_str());
-	//Groesse des ersten Levels einlesen
-	getline(file,buffer);
-	bufferInt = atoi(buffer.c_str());
-	vec_Size.push_back(bufferInt);
-	
-	
-	for(unsigned int i=0; i<=level;i++) {
-		if(coord == true) {
-			file >> bufferDoubflo;
-			vec_data_Coord.push_back(bufferDoubflo);//erste null
-			file.get(c);//ueberspringt leerzeichen
-		
-			for(unsigned int j=0; j<vec_Size[i]; j++) {
-				file.read((char*)&bufferDoubflo,sizeof(double));
-				vec_data_Coord.push_back((doubflo)bufferDoubflo);
-			}
-
-			vec2D_data_Coord.push_back(vec_data_Coord);
-			vec_data_Coord.clear();
-		} else {
-			file >> bufferInt;
-			vec_data.push_back(bufferInt);//erste null
-			file.get(c);//ueberspringt leerzeichen
-		
-			for(unsigned int j=0; j<vec_Size[i]; j++) {
-				file.read((char*)&bufferInt,sizeof(unsigned int));
-				vec_data.push_back(bufferInt);
-			}
-
-			vec2D_data.push_back(vec_data);
-			vec_data.clear();
-		}
-
-		if(i==level) break;
-		file.get(c);//ueberspringt Leerzeichen
-		getline(file,buffer);
-		bufferInt = atoi(buffer.c_str());
-		vec_Size.push_back(bufferInt);
-	}
-}
-
-
-unsigned int CoordNeighborGeoV::getLevel() {
-	return level;
-}
-
-unsigned int CoordNeighborGeoV::getSize(unsigned int level) {
-	int zaehler=0;
-	for (vector<unsigned int>::iterator it = vec_Size.begin() ; it != vec_Size.end(); it++)	
-	{if (zaehler == level){return *it; break;}// durchlauft den Vektor mit den Größen. Break wenn level dem Schleifendurchgang entspricht
-	zaehler++;
-	
-	}
-	 //cout<<"Levelgroesse nicht zulaessig"<<endl;
-	 cout<<"Levelgroesse nicht zulaessig zaehler: "<< zaehler << " level: "<< level << " vec_Size.size(): " << vec_Size.size() <<endl;
-	 exit(1);
-}
-
-
-void CoordNeighborGeoV::initArray(unsigned int *int_ptr, unsigned int level) {
-
-	int zaehler=0;
-	unsigned int n=0;
-	if (int_ptr != NULL) { //nur wenn genug Speicher vorhanden ist
-		for (vector<vector<unsigned int> >::iterator it = vec2D_data.begin() ; it != vec2D_data.end(); it++) {
-			if(zaehler==level) {
-				for(vector<unsigned int>::iterator it2 = it->begin(); it2 != it->end(); it2++){
-					int_ptr[n]=*it2;
-						n++;
-				}
-			}
-			zaehler++;	
-		}
-	}
-}
-
-vector<unsigned int> CoordNeighborGeoV::getVec(unsigned int level) {
-	int zaehler=0;
-	for (vector<vector<unsigned int> >::iterator it = vec2D_data.begin() ; it != vec2D_data.end(); it++) {
-		if (zaehler==level) {return *it;}
-		zaehler++;	
-	}
-	cout<<"Levelgroesse nicht zulaessig"<<endl;
-	 exit(1);
-}
-
-void CoordNeighborGeoV::setVec(unsigned int level, vector<unsigned int> vec) {
-	this->vec2D_data[level]=vec;
-	//for (int i=0; i<=2200; i++) {
-		//cout <<"Test im Setter: "<< i <<": " << vec[i] << endl;
-	//}
-}
-
-
-
-
-
-
-
-void CoordNeighborGeoV::initArrayCoord(doubflo *int_ptr, unsigned int level) {
-
-	int zaehler=0;
-	unsigned int n=0;
-	if (int_ptr != NULL) { //nur wenn genug Speicher vorhanden ist
-		for (vector<vector<doubflo> >::iterator it = vec2D_data_Coord.begin() ; it != vec2D_data_Coord.end(); it++) {		
-			if(zaehler==level) {
-				for(vector<doubflo>::iterator it2 = it->begin(); it2 != it->end(); it2++){
-					int_ptr[n]=*it2;
-					n++;
-				}
-			}
-			zaehler++;	
-		}
-	}
-}
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/CoordNeighborGeoV.h b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/CoordNeighborGeoV.h
deleted file mode 100644
index b1e3a16a7..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/CoordNeighborGeoV.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#pragma once
-
-#include <vector>
-#include <fstream>
-
-using namespace std;
-
-class CoordNeighborGeoV 
-{
-protected:
-	ifstream file; 
-	unsigned int level; 
-	vector<unsigned int> vec_Size; // Die Groeßen der Felder
-
-	vector<unsigned int> vec_data; //das Feld mit Werten, temporär zum Füllen von vec2D_data
-	vector<doubflo> vec_data_Coord; //das Feld mit Werten, temporär zum Füllen von vec2D_data
-	vector< vector<unsigned int> > vec2D_data; //alle Felder mit Werten gegliedert nach Level
-	vector< vector< doubflo> > vec2D_data_Coord; //alle Felder mit Werten gegliedert nach Level
-
-public:
-	CoordNeighborGeoV();
-	CoordNeighborGeoV(string ad, bool binaer, bool coord);
-	~CoordNeighborGeoV(void);
-	void init(bool coord); //füllt die Vektoren 
-	void init_Binary(bool coord);
-	
-
-	unsigned int getLevel();//liefert einen Wert, die größte Levelzahl
-	unsigned int getSize(unsigned int level); //liefert die Größe des gesuchten Levels
-	vector<unsigned int>getVec(unsigned int level);
-	void setVec(unsigned int level, vector<unsigned int> vec);
-
-	void initArray(unsigned int *int_ptr, unsigned int level );
-	void initArrayCoord(doubflo *int_ptr, unsigned int level );
-};
-
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Interface.cpp b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Interface.cpp
deleted file mode 100644
index 30bab1fce..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Interface.cpp
+++ /dev/null
@@ -1,2879 +0,0 @@
-#include "Interface.h"
-#include <algorithm>
-#include <math.h>
-#define TEST false
-
-
-
-Interface::Interface(bool binaer)
-{
-	this->binaer=binaer;
-	system = new string[6];
-	system[0] = "inlet";
-	system[1] = "outlet";
-	system[2] = "front";
-	system[3] = "back";
-	system[4] = "top";
-	system[5] = "bottom";
-
-
-
-}
-
-Interface::~Interface(void)
-{
-}
-
-bool Interface::getBinaer(){
-	return binaer;
-}
-
-void Interface::allocArrays_CoordNeighborGeo(Parameter* para) {
-	cout << "-----Config Arrays Coord, Neighbor, Geo------" << endl;
-
-	CoordNeighborGeoV *coordX = new CoordNeighborGeoV(para->getcoordX(), binaer, true);
-	CoordNeighborGeoV *coordY = new CoordNeighborGeoV(para->getcoordY(), binaer, true);
-	CoordNeighborGeoV *coordZ = new CoordNeighborGeoV(para->getcoordZ(), binaer, true);
-	neighX = new CoordNeighborGeoV(para->getneighborX(), binaer, false);
-	neighY = new CoordNeighborGeoV(para->getneighborY(), binaer, false);
-	neighZ = new CoordNeighborGeoV(para->getneighborZ(), binaer, false);
-	//Particles or Wale
-	if (para->getCalcParticle() || para->getUseWale())
-	{
-		neighWSB = new CoordNeighborGeoV(para->getneighborWSB(), binaer, false);
-	}
-
-	CoordNeighborGeoV *geoV = new CoordNeighborGeoV(para->getgeoVec(), binaer, false);
-
-
-	int level = coordX->getLevel();
-	cout << "Anzahl Level: " << level + 1 << endl;
-	int AnzahlKnotenGes = 0;
-	cout << "Anzahl Knoten: " << endl;
-	//------------------------//------------------------//------------------------//------------------------//------------------------//------------------------//------------------------//------------------------
-	for (int i = 0; i <= level; i++) {
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////		
-		int temp = coordX->getSize(i) + 1;
-		AnzahlKnotenGes += temp;
-		cout << "Level " << i << " = " << temp << " Knoten" << endl;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		int blocks = (temp / para->getParH(i)->numberofthreads) + 1;
-
-		//cout << "Anzahl Blocks vorher: " << temp / para->getParH(i)->numberofthreads << endl;
-		//cout << "Anzahl Blocks nachher: " << blocks << endl;
-
-		para->getParH(i)->size_Array_SP = blocks * para->getParH(i)->numberofthreads;
-		para->getParD(i)->size_Array_SP = para->getParH(i)->size_Array_SP;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		para->getParH(i)->size_Mat_SP = temp;
-		para->getParD(i)->size_Mat_SP = temp;
-		para->getParH(i)->mem_size_doubflo_SP = sizeof(doubflo)* para->getParH(i)->size_Array_SP;
-		para->getParH(i)->mem_size_int_SP = sizeof(unsigned int)* para->getParH(i)->size_Array_SP;
-		para->getParD(i)->mem_size_doubflo_SP = sizeof(doubflo)* para->getParD(i)->size_Array_SP;
-		para->getParD(i)->mem_size_int_SP = sizeof(unsigned int)* para->getParD(i)->size_Array_SP;
-		//para->getParH(i)->mem_size_doubflo_SP = sizeof(doubflo)* para->getParH(i)->size_Mat_SP;
-		//para->getParH(i)->mem_size_int_SP = sizeof(unsigned int)* para->getParH(i)->size_Mat_SP;
-		//para->getParD(i)->mem_size_doubflo_SP = sizeof(doubflo)* para->getParD(i)->size_Mat_SP;
-		//para->getParD(i)->mem_size_int_SP = sizeof(unsigned int)* para->getParD(i)->size_Mat_SP;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//cout <<"Test 1 " <<endl;
-		//cout << "size_Mat_SP Host in Level " << i << " = " << para->getParH(i)->size_Mat_SP << endl;
-		//cout << "size_Mat_SP Device in Level " << i << " = " << para->getParD(i)->size_Mat_SP << endl;
-		//cout << "mem_size_doubflo_SP Host in Level " << i << " = " << para->getParH(i)->mem_size_doubflo_SP << endl;
-		//cout << "mem_size_doubflo_SP Device in Level " << i << " = " << para->getParD(i)->mem_size_doubflo_SP << endl;
-		//cout << "mem_size_int_SP Host in Level " << i << " = " << para->getParH(i)->mem_size_int_SP << endl;
-		//cout << "mem_size_int_SP Device in Level " << i << " = " << para->getParD(i)->mem_size_int_SP << endl;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		para->cudaAllocCoord(i);
-		para->cudaAllocSP(i);
-		if (para->getCalcMedian()) 	                       
-			para->cudaAllocMedianSP(i);
-		if (para->getCalcParticle() || para->getUseWale()) 
-			para->cudaAllocNeighborWSB(i);
-		if (para->getUseWale())                            
-			para->cudaAllocTurbulentViscosity(i);
-		//cout <<"Test 2 " <<endl;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		coordX->initArrayCoord(para->getParH(i)->coordX_SP, i);
-		coordY->initArrayCoord(para->getParH(i)->coordY_SP, i);
-		coordZ->initArrayCoord(para->getParH(i)->coordZ_SP, i);
-		//cout <<"Test 3 " <<endl;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		neighX->initArray(para->getParH(i)->neighborX_SP, i);
-		neighY->initArray(para->getParH(i)->neighborY_SP, i);
-		neighZ->initArray(para->getParH(i)->neighborZ_SP, i);
-		//Particles or Wale
-		if (para->getCalcParticle() || para->getUseWale())
-		{
-			neighWSB->initArray(para->getParH(i)->neighborWSB_SP, i);
-		}
-		//cout <<"Test 4 " <<endl;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		geoV->initArray(para->getParH(i)->geoSP, i);
-		//cout <<"Test 5 " <<endl;
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		////test
-		//cout << " Laenge des Vektors: " << coordX1->getSize(i) << endl;
-		//cout << " Laenge des Vektors: " << coordY1->getSize(i) << endl;
-		//cout << " Laenge des Vektors: " << coordZ1->getSize(i) << endl;
-		//cout << " Laenge des Vektors: " << neighX1->getSize(i) << endl;
-		//cout << " Laenge des Vektors: " << neighY1->getSize(i) << endl;
-		//cout << " Laenge des Vektors: " << neighZ1->getSize(i) << endl;
-		//cout << " Laenge des Vektors: " << geoV1->getSize(i) << endl;
-		////////////////////////////////////////////////////////////////////////////////
-		//Test Coarse Nodes in Fine Grid
-		//if (i == 0)
-		//{
-		//	for (int t1 = 0; t1 < para->getParH(0)->size_Mat_SP; t1++)
-		//	{
-		//		if (((para->getParH(0)->coordX_SP[t1] > 15.0) && (para->getParH(0)->coordX_SP[t1] < 25.0)) &&
-		//			((para->getParH(0)->coordY_SP[t1] > 15.0) && (para->getParH(0)->coordY_SP[t1] < 25.0)) &&
-		//			((para->getParH(0)->coordZ_SP[t1] > 15.0) && (para->getParH(0)->coordZ_SP[t1] < 25.0)))
-		//		{
-		//			cout << " CoordTest " << para->getParH(0)->coordX_SP[t1] << " " << para->getParH(0)->coordY_SP[t1] << " " << para->getParH(0)->coordZ_SP[t1] << " " << t1 << endl;
-		//		}
-		//		//if (t1 == 780)
-		//		//{
-		//		//	cout << " CoordTest " << para->getParH(0)->coordX_SP[t1] << " " << para->getParH(0)->coordY_SP[t1] << " " << para->getParH(0)->coordZ_SP[t1] << " " << t1 << endl;
-		//		//}
-		//		//cout << " CoordTest " << para->getParH(0)->coordX_SP[t1] << " " << para->getParH(0)->coordY_SP[t1] << " " << para->getParH(0)->coordZ_SP[t1] << endl;
-		//	}
-		//}
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//test2
-		//cout << " erster Punkt des Vektors neighborX_SP: " << para->getParH(i)->neighborX_SP[1] << endl;
-		//cout << " letzter Punkt des Vektors neighborX_SP: " << para->getParH(i)->neighborX_SP[para->getParH(i)->size_Mat_SP] << endl;
-		//cout << " erster Punkt des Vektors neighborY_SP: " << para->getParH(i)->neighborY_SP[1] << endl;
-		//cout << " letzter Punkt des Vektors neighborY_SP: " << para->getParH(i)->neighborY_SP[para->getParH(i)->size_Mat_SP] << endl;
-		//cout << " erster Punkt des Vektors neighborZ_SP: " << para->getParH(i)->neighborZ_SP[1] << endl;
-		//cout << " letzter Punkt des Vektors neighborZ_SP: " << para->getParH(i)->neighborZ_SP[para->getParH(i)->size_Mat_SP] << endl;
-		//cout << " erster Punkt des Vektors geoSP: " << para->getParH(i)->geoSP[1] << endl;
-		//cout << " letzter Punkt des Vektors geoSP: " << para->getParH(i)->geoSP[para->getParH(i)->size_Mat_SP] << endl;
-		//////////////////////////////////////////////////////////////////////////
-		for (int j = 0; j <= temp; j++)
-		{
-			para->getParH(i)->vx_SP[j] = para->getVelocity();//0.0f;//0.035f;
-			para->getParH(i)->vy_SP[j] = 0.0f;//para->getVelocity();//0.0f;
-			para->getParH(i)->vz_SP[j] = 0.0f;
-			para->getParH(i)->rho_SP[j] = 0.0f;
-			para->getParH(i)->press_SP[j] = 0.0f;
-			if (para->getCalcMedian()){
-				para->getParH(i)->vx_SP_Med[j] = 0.0f;
-				para->getParH(i)->vy_SP_Med[j] = 0.0f;
-				para->getParH(i)->vz_SP_Med[j] = 0.0f;
-				para->getParH(i)->rho_SP_Med[j] = 0.0f;
-				para->getParH(i)->press_SP_Med[j] = 0.0f;
-			}
-			if (para->getUseWale()) {
-				para->getParH(i)->turbViscosity[j] = 0.0f;
-			}
-		}
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		////Acoustic Test
-		//doubflo factor01 = 20.0;
-		//doubflo factor02 = 40.0;
-		//doubflo factor03 = 60.0;
-		//doubflo factor04 = 80.0;
-		//doubflo factor = factor04; //01 = 20.0f; 02 = 40.0f; 03 = 60.0f; 04 = 80.0f
-
-		//doubflo myEpsilon = 0.001; // * 0.1
-		//doubflo b = 0.1 * factor; 
-		//doubflo myAlpha = log(2.0) / (b * b);
-		//doubflo myRadius = 0.0;
-		//doubflo coordX = factor + 1.0;
-		//doubflo coordY = factor + 1.0;
-		//doubflo coordZ = factor + 1.0;
-		//doubflo distX = 0.0;
-		//doubflo distY = 0.0;
-		//doubflo distZ = 0.0;
-		//doubflo myPress = 0.0;
-
-		//for (int j = 0; j <= temp; j++)
-		//{
-		//	distX = para->getParH(i)->coordX_SP[j] - coordX;
-		//	distY = para->getParH(i)->coordY_SP[j] - coordY;
-		//	distZ = para->getParH(i)->coordZ_SP[j] - coordZ;
-		//	//myRadius = sqrt((distX * distX) + (distY * distY)); //XY
-		//	//myRadius = sqrt((distY * distY) + (distZ * distZ)); //YZ
-		//	myRadius = sqrt((distX * distX) + (distZ * distZ)); //XZ
-
-		//	myPress = myEpsilon * exp(-myAlpha * myRadius * myRadius);
-
-		//	para->getParH(i)->rho_SP[j] = myPress;
-		//	para->getParH(i)->press_SP[j] = myPress;
-		//}
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//Taylor Green Vortex uniform
-		doubflo PI = 3.141592653589793238462643383279f;
-		doubflo gridX = para->getParH(i)->gridNX - 1;
-		doubflo gridY = para->getParH(i)->gridNY - 1;
-		doubflo gridZ = para->getParH(i)->gridNZ - 1;
-		//like MG
-		//doubflo uAdvect = doubflo (1. / 250.); //32 nodes -> 250; 40 nodes -> 200; 64 nodes -> 500; 128 nodes -> 1000; 256 nodes -> 2000; 512 nodes -> 4000
-		doubflo uAdvect = doubflo(0.0008); //32 nodes -> 0.032; 64 nodes -> 0.016; 128 nodes -> 0.008; 256 nodes -> 0.004; 512 nodes -> 0.002
-
-		for (int j = 0; j <= temp; j++)
-		{
-			para->getParH(i)->rho_SP[j] = 
-				(doubflo)((para->getVelocity()*para->getVelocity())*3.0 / 4.0*(cos(para->getParH(i)->coordX_SP[j]*4.0*PI / 
-				(doubflo)gridX) + cos(para->getParH(i)->coordZ_SP[j] *4.0*PI /
-				(doubflo)gridZ)))*(doubflo)(gridZ) / (doubflo)(gridX);
-			
-			para->getParH(i)->vy_SP[j] = (doubflo)0.0;
-
-			//incl. additional velocity
-			//para->getParH(i)->vx_SP[j] = 
-			//	(doubflo)((32. * 32. ) / (1000. * 32.) * para->getVelocity() / 0.1 + para->getVelocity()*sin((para->getParH(i)->coordX_SP[j]*2.0*PI /
-			//	(doubflo)gridX))*cos(para->getParH(i)->coordZ_SP[j]*2.0*PI / (doubflo)gridZ));
-			//like MG
-			para->getParH(i)->vx_SP[j] =
-				(doubflo)(para->getVelocity()*sin((para->getParH(i)->coordX_SP[j] * 2.0*PI / (doubflo)gridX))*cos(para->getParH(i)->coordZ_SP[j] * 2.0*PI / (doubflo)gridZ)) + uAdvect * (1.0 + para->getParH(i)->rho_SP[j]);
-
-			//no additional velocity
-			//para->getParH(i)->vz_SP[j] = 
-			//	(doubflo)(-para->getVelocity()*cos((para->getParH(i)->coordX_SP[j] *2.0*PI / (doubflo)gridX))*sin(para->getParH(i)->coordZ_SP[j]*2.0*PI /
-			//	(doubflo)gridZ))*(doubflo)(gridZ) / (doubflo)(gridX);
-			//like MG
-			para->getParH(i)->vz_SP[j] =
-				(doubflo)(-para->getVelocity()*cos((para->getParH(i)->coordX_SP[j] * 2.0*PI / (doubflo)gridX))*sin(para->getParH(i)->coordZ_SP[j] * 2.0*PI / (doubflo)gridZ));// *(doubflo)(gridZ) / (doubflo)(gridX);
-			//cout << "\n Ich lebe: " << j << endl;
-		}
-		//cout << "\n GridNx: " << gridX << " GridNy: " << gridY << " GridNz: " << gridZ << endl;
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		////Desox fix
-		//int levelToChange = 0;//uniform ... otherwise 7;
-		//if (i==levelToChange)
-		//{
-		//	doubflo startX    = 769.0;//1025.0f;//uniform ... otherwise 114.999f; //120.95664f;
-		//	doubflo endX      = 1537.0;//1793.0f;//uniform ... otherwise 120.999f;
-		//	doubflo sizePress = endX - startX;
-		//	doubflo tempPress = (1.0f / para->getFactorPressBC());
-		//	cout << " tempPress: " << tempPress << endl;
-		//	doubflo factor    = 0.0f;
-		//	int tempIn = 0;
-		//	for (int j = 0; j <= temp; j++)
-		//	{
-		//		if ( (para->getParH(i)->coordX_SP[j] > startX) && (para->getParH(i)->coordX_SP[j] < endX))
-		//		{
-		//			factor = (((para->getParH(i)->coordX_SP[j] - startX) / sizePress)); 
-		//			//if (tempIn < 20)
-		//			//{
-		//				//cout << " CoordX: " << para->getParH(i)->coordX_SP[j] << endl;
-		//				//cout << " factor: " << factor << endl;
-		//			//}
-		//			//tempIn++;
-		//			para->getParH(i)->rho_SP[j] = factor * tempPress;
-		//			para->getParH(i)->press_SP[j] = factor * tempPress;
-		//		}
-		//	}
-		//}
-		////////////////////////////////////////////////////////////////////////////////
-		//Quatsch Test
-		//for (int t1 = 0; t1 < 10; t1++)
-		//{
-		//	cout <<" CoordTest " << para->getParH(i)->coordX_SP[t1] << " " << para->getParH(i)->coordY_SP[t1] << " " << para->getParH(i)->coordZ_SP[t1] << endl;
-		//}
-		////////////////////////////////////////////////////////////////////////////
-		rearrangeGeometry(para, i);
-		////////////////////////////////////////////////////////////////////////////
-		para->cudaCopySP(i);
-		para->cudaCopyCoord(i);
-		if (para->getCalcMedian()) 	    para->cudaCopyMedianSP(i);
-		if (para->getCalcParticle()) 	para->cudaCopyNeighborWSB(i);
-		if (para->getUseWale()) {
-			para->cudaCopyNeighborWSB(i);
-			para->cudaCopyTurbulentViscosityHD(i);
-		}
-		//cout <<"Test 6 " <<endl;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	}
-
-	cout << "Gesamtanzahl Knoten = " << AnzahlKnotenGes << endl;
-
-
-
-	//////////////////////////////////////////////////////////////////////////////
-	////Mist
-	////////////////////////////////////////////////////////////////////////////
-	//double minX, maxX;  
-	//double minY, maxY;
-	//double minZ, maxZ;
-	//double diffX = 0.;
-	//double diffY = 0.;
-	//double diffZ = 0.;
-	////int levelX, levelY, levelZ;
-
-	//for (int i = 0; i < para->getMinCoordX().size(); i++)
-	//{
-	//	if ((para->getMaxCoordX()[i] - para->getMinCoordX()[i]) > diffX)
-	//	{
-	//		diffX = para->getMaxCoordX()[i] - para->getMinCoordX()[i];
-	//		minX = para->getMinCoordX()[i];
-	//		maxX = para->getMaxCoordX()[i];
-	//		//levelX = i;
-	//	} 
-	//	if ((para->getMaxCoordY()[i] - para->getMinCoordY()[i]) > diffY)
-	//	{
-	//		diffY = para->getMaxCoordY()[i] - para->getMinCoordY()[i];
-	//		minY = para->getMinCoordY()[i];
-	//		maxY = para->getMaxCoordY()[i];
-	//		//levelY = i;
-	//	}
-	//	if ((para->getMaxCoordZ()[i] - para->getMinCoordZ()[i]) > diffZ)
-	//	{
-	//		diffZ = para->getMaxCoordZ()[i] - para->getMinCoordZ()[i];
-	//		minZ = para->getMinCoordZ()[i];
-	//		maxZ = para->getMaxCoordZ()[i];
-	//		//levelZ = i;
-	//	}
-	//}
-	//
-	//double midX = (maxX + minX) / 2.;
-	//double midY = (maxY + minY) / 2.;
-	//double midZ = (maxZ + minZ) / 2. + 10.0;
-	////cout << " minX = " << minX << " minY = " << minY << " minZ = " << minZ << endl;
-	////cout << " maxX = " << maxX << " maxY = " << maxY << " maxZ = " << maxZ << endl;
-	////cout << " midx = " << midX << " midy = " << midY << " midz = " << midZ << endl;
-	//double dx = 1.0;//(1.0/pow(2.0,i));
-
-	////set velocity and press
-	//for (int i=0; i<=level;i++) {
-	//	int temp = coordX->getSize(i) + 1;
-	//	//double dx = (1.0/pow(2.0,i));
-	//	double d = maxY - minY + dx;
-	//	double r = d / 2.0;
-	//	double r2 = r * r;
-	//	double l = (maxX - minX + dx);
-
-	//	for (int j = 0; j <= temp; j++)
-	//	{
-	//		////////////////////////////////////////////////////////////////////////////
-	//		para->getParH(i)->vz_SP[j]    = sin(3.14*2.0/diffX*para->getParH(i)->coordX_SP[j])*sin(3.14*2.0/diffY*para->getParH(i)->coordY_SP[j])*sin(3.14*2.0/diffZ*para->getParH(i)->coordZ_SP[j])*(0.000005f) / (3.0 * 4.0 * para->getViscosity() * l) * 
-	//									    (r2 - ( ((midY - para->getParH(i)->coordY_SP[j]) * (midY - para->getParH(i)->coordY_SP[j])) + 
-	//									    ((midZ - para->getParH(i)->coordZ_SP[j]) * (midZ - para->getParH(i)->coordZ_SP[j])) ));
-	//		////////////////////////////////////////////////////////////////////////////
-	//		//para->getParH(i)->rho_SP[j]   = (1.0 - ((para->getParH(i)->coordX_SP[j] - minX) / l * 2.0)) ;
-	//		//////////////////////////////////////////////////////////////////////////////
-	//		//para->getParH(i)->press_SP[j] = (1.0 - ((para->getParH(i)->coordX_SP[j] - minX) / l * 2.0)) ;
-	//		////////////////////////////////////////////////////////////////////////////
-	//	}
-	//	////////////////////////////////////////////////////////////////////////////
-	//	para->cudaCopySP(i);
-	//	////////////////////////////////////////////////////////////////////////////
-	//}
-	////////////////////////////////////////////////////////////////////////////
-
-
-	//////////////////////////////////////////////////////////////////////////////
-	////Poiseuille Flow
-	////////////////////////////////////////////////////////////////////////////
-	//double minX, maxX;  
-	//double minY, maxY;
-	//double minZ, maxZ;
-	//double diffX = 0.;
-	//double diffY = 0.;
-	//double diffZ = 0.;
-	////int levelX, levelY, levelZ;
-
-	//for (int i = 0; i < para->getMinCoordX().size(); i++)
-	//{
-	//	if ((para->getMaxCoordX()[i] - para->getMinCoordX()[i]) > diffX)
-	//	{
-	//		diffX = para->getMaxCoordX()[i] - para->getMinCoordX()[i];
-	//		minX = para->getMinCoordX()[i];
-	//		maxX = para->getMaxCoordX()[i];
-	//		//levelX = i;
-	//	} 
-	//	if ((para->getMaxCoordY()[i] - para->getMinCoordY()[i]) > diffY)
-	//	{
-	//		diffY = para->getMaxCoordY()[i] - para->getMinCoordY()[i];
-	//		minY = para->getMinCoordY()[i];
-	//		maxY = para->getMaxCoordY()[i];
-	//		//levelY = i;
-	//	}
-	//	if ((para->getMaxCoordZ()[i] - para->getMinCoordZ()[i]) > diffZ)
-	//	{
-	//		diffZ = para->getMaxCoordZ()[i] - para->getMinCoordZ()[i];
-	//		minZ = para->getMinCoordZ()[i];
-	//		maxZ = para->getMaxCoordZ()[i];
-	//		//levelZ = i;
-	//	}
-	//}
-	//
-	//double midX = (maxX + minX) / 2.;
-	//double midY = (maxY + minY) / 2.;
-	//double midZ = (maxZ + minZ) / 2.;
-	////cout << " minX = " << minX << " minY = " << minY << " minZ = " << minZ << endl;
-	////cout << " maxX = " << maxX << " maxY = " << maxY << " maxZ = " << maxZ << endl;
-	////cout << " midx = " << midX << " midy = " << midY << " midz = " << midZ << endl;
-	//double dx = 1.0;//(1.0/pow(2.0,i));
-
-	////set velocity and press
-	//for (int i=0; i<=level;i++) {
-	//	int temp = coordX->getSize(i) + 1;
-	//	//double dx = (1.0/pow(2.0,i));
-	//	double d = maxY - minY + dx;
-	//	double r = d / 2.0;
-	//	double r2 = r * r;
-	//	double l = (maxX - minX + dx);
-
-	//	for (int j = 0; j <= temp; j++)
-	//	{
-	//		////////////////////////////////////////////////////////////////////////////
-	//		para->getParH(i)->vx_SP[j]    = (2.0 / para->getFactorPressBC()) / (3.0 * 4.0 * para->getViscosity() * l) * 
-	//									    (r2 - ( ((midY - para->getParH(i)->coordY_SP[j]) * (midY - para->getParH(i)->coordY_SP[j])) + 
-	//									    ((midZ - para->getParH(i)->coordZ_SP[j]) * (midZ - para->getParH(i)->coordZ_SP[j])) ));
-	//		////////////////////////////////////////////////////////////////////////////
-	//		para->getParH(i)->rho_SP[j]   = (1.0 - ((para->getParH(i)->coordX_SP[j] - minX) / l * 2.0)) / para->getFactorPressBC();
-	//		////////////////////////////////////////////////////////////////////////////
-	//		para->getParH(i)->press_SP[j] = (1.0 - ((para->getParH(i)->coordX_SP[j] - minX) / l * 2.0)) / para->getFactorPressBC();
-	//		////////////////////////////////////////////////////////////////////////////
-	//	}
-	//	////////////////////////////////////////////////////////////////////////////
-	//	para->cudaCopySP(i);
-	//	////////////////////////////////////////////////////////////////////////////
-	//}
-	////////////////////////////////////////////////////////////////////////////
-
-
-
-	////////////////////////////////////////////////////////////////////////////
-	//Coordinates
-	//cout <<" X-Drehkoordinate: " << para->getParH(2)->coordX_SP[2822040] << endl;
-	//cout <<" Y-Drehkoordinate: " << para->getParH(2)->coordY_SP[2822040] << endl;
-	////////////////////////////////////////////////////////////////////////////
-	////MS added
-	//ifstream file_localToGlobal;
-	//file_localToGlobal.open("D:/temp/Soeren/mesh_to_read/sphere_refinement2/coordLocalToGlobal.dat", ios::in);
-	//if (!file_localToGlobal) {
-	//	cerr << "Fehler beim Oeffnen von file_localToGlobal" <<endl;
-	//	exit(1);
-	//}
-	////Startpositionen einlesen
-	//string buffer;
-	//for (int i=0; i<=level;i++) {
-	//	file_localToGlobal > > buffer;
-	//	file_localToGlobal > > para->getParH(i)->distX;
-	//	file_localToGlobal > > para->getParH(i)->distY;
-	//	file_localToGlobal > > para->getParH(i)->distZ;
-	//}
-	////////////////////////////////////////////////////////////////////////////
-
-	//Test Soeren------------------------------------------------------------------------------------------------------------------------
-	//cout << "Test Koordinanten: " << endl;
-	//cout << "TEST coordX level: "<< i <<" , erster: " << ara_coordX[i][1] <<", letzter: "<< ara_coordX[i][temp-1] << endl;
-	//cout << "TEST coordY level: "<< i <<" , erster: " << ara_coordY[i][1] <<", letzter: "<< ara_coordY[i][temp-1] << endl;
-	//cout << "TEST coordZ level: "<< i <<" , erster: " << ara_coordZ[i][1] <<", letzter: "<< ara_coordZ[i][temp-1] << endl;
-	//cout << "Test Nachbarn: " << endl;
-	//cout << "TEST neighX level: "<< i <<" , erster: " << ara_nX[i][1] <<", letzter: "<< ara_nX[i][temp-1] << endl;
-	//cout << "TEST neighY level: "<< i <<" , erster: " << ara_nY[i][1] <<", letzter: "<< ara_nY[i][temp-1] << endl;
-	//cout << "TEST neighZ level: "<< i <<" , erster: " << ara_nZ[i][1] <<", letzter: "<< ara_nZ[i][temp-1] << endl;
-	//cout << "Test geo: " << endl;
-	//cout << "TEST geo level: "<< i <<" , erster: " << ara_geoV[i][1] <<", letzter: "<< ara_geoV[i][temp-1] << endl;
-	//ENDE Test Soeren------------------------------------------------------------------------------------------------------------------------
-
-	//}	
-
-	//------------------------//------------------------//------------------------//------------------------//------------------------//------------------------//------------------------//------------------------
-
-
-	//Test Soeren------------------------------------------------------------------------------------------------------------------------
-	//if(TEST==true) {
-	//	cout << "Test Koordinanten: " << endl;
-	//	cout << "TEST coordX level: "<< i <<" , erster: " << ara_coordX[i][1] <<", letzter: "<< ara_coordX[i][temp-1] << endl;
-	//	cout << "TEST coordY level: "<< i <<" , erster: " << ara_coordY[i][1] <<", letzter: "<< ara_coordY[i][temp-1] << endl;
-	//	cout << "TEST coordZ level: "<< i <<" , erster: " << ara_coordZ[i][1] <<", letzter: "<< ara_coordZ[i][temp-1] << endl;
-
-	//	cout << "Test geo: " << endl;
-	//	cout << "TEST geo level: "<< i <<" , erster: " << ara_geoV[i][1] <<", letzter: "<< ara_geoV[i][temp-1] << endl;
-	////ENDE Test Soeren------------------------------------------------------------------------------------------------------------------------
-	//}
-	
-
-
-	delete coordX;
-	delete coordY;
-	delete coordZ;
-
-	delete geoV;
-
-	cout << "-----Ende Coord, Neighbor, Geo------" <<endl;
-
-}
-
-void Interface::allocArrays_OffsetScale(Parameter* para) {
-	
-	cout << "-----Config Arrays OffsetScale------" <<endl;
-	OffsetScale *obj_offCF = new OffsetScale(para->getscaleOffsetCF(), true);
-	OffsetScale *obj_offFC = new OffsetScale(para->getscaleOffsetFC(), true);
-	OffsetScale *obj_scaleCFC = new OffsetScale(para->getscaleCFC(), false);
-	OffsetScale *obj_scaleCFF = new OffsetScale(para->getscaleCFF(), false);
-	OffsetScale *obj_scaleFCC = new OffsetScale(para->getscaleFCC(), false);
-	OffsetScale *obj_scaleFCF = new OffsetScale(para->getscaleFCF(), false);
-
-	int level = obj_offCF->getLevel();
-
-	int AnzahlKnotenGesCF = 0;
-	int AnzahlKnotenGesFC = 0;
-
-	for (int i=0; i<level; i++) {
-		unsigned int tempCF = obj_offCF->getSize(i);
-		cout << "Groesse der Daten CF vom Level "<< i <<" : " << tempCF <<endl;
-		unsigned int tempFC = obj_offFC->getSize(i);
-		cout << "Groesse der Daten FC vom Level "<< i <<" : " << tempFC <<endl;
-		
-		AnzahlKnotenGesCF += tempCF;
-		AnzahlKnotenGesFC += tempFC;
-		
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//size + memsize CF
-		para->getParH(i)->K_CF = tempCF;
-		para->getParD(i)->K_CF = para->getParH(i)->K_CF;
-		para->getParH(i)->intCF.kCF = para->getParH(i)->K_CF;
-		para->getParD(i)->intCF.kCF = para->getParH(i)->K_CF;
-		para->getParH(i)->mem_size_kCF = sizeof(unsigned int)* para->getParH(i)->K_CF;
-		para->getParD(i)->mem_size_kCF = sizeof(unsigned int)* para->getParD(i)->K_CF;
-		para->getParH(i)->mem_size_kCF_off = sizeof(doubflo)* para->getParH(i)->K_CF;
-		para->getParD(i)->mem_size_kCF_off = sizeof(doubflo)* para->getParD(i)->K_CF;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//size + memsize FC
-		para->getParH(i)->K_FC = tempFC;
-		para->getParD(i)->K_FC = para->getParH(i)->K_FC;
-		para->getParH(i)->intFC.kFC = para->getParH(i)->K_FC;
-		para->getParD(i)->intFC.kFC = para->getParH(i)->K_FC;
-		para->getParH(i)->mem_size_kFC = sizeof(unsigned int)* para->getParH(i)->K_FC;
-		para->getParD(i)->mem_size_kFC = sizeof(unsigned int)* para->getParD(i)->K_FC;
-		para->getParH(i)->mem_size_kFC_off = sizeof(doubflo)* para->getParH(i)->K_FC;
-		para->getParD(i)->mem_size_kFC_off = sizeof(doubflo)* para->getParD(i)->K_FC;
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//alloc
-		para->cudaAllocInterfaceCF(i);
-		para->cudaAllocInterfaceFC(i);
-		para->cudaAllocInterfaceOffCF(i);
-		para->cudaAllocInterfaceOffFC(i);
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//init
-		obj_offCF->initArrayOffset(para->getParH(i)->offCF.xOffCF, para->getParH(i)->offCF.yOffCF, para->getParH(i)->offCF.zOffCF, i);
-		obj_offFC->initArrayOffset(para->getParH(i)->offFC.xOffFC, para->getParH(i)->offFC.yOffFC, para->getParH(i)->offFC.zOffFC, i);
-		obj_scaleCFC->initArray(para->getParH(i)->intCF.ICellCFC, i);
-		obj_scaleCFF->initArray(para->getParH(i)->intCF.ICellCFF, i);
-		obj_scaleFCC->initArray(para->getParH(i)->intFC.ICellFCC, i);
-		obj_scaleFCF->initArray(para->getParH(i)->intFC.ICellFCF, i);
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//copy
-		para->cudaCopyInterfaceCF(i);
-		para->cudaCopyInterfaceFC(i);
-		para->cudaCopyInterfaceOffCF(i);
-		para->cudaCopyInterfaceOffFC(i);
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	}
-	cout << "Gesamtanzahl Knoten CF = " << AnzahlKnotenGesCF << endl;
-	cout << "Gesamtanzahl Knoten FC = " << AnzahlKnotenGesFC << endl;
-		
-	delete obj_offCF;
-	delete obj_offFC;
-	delete obj_scaleCFC;
-	delete obj_scaleCFF;
-	delete obj_scaleFCC;
-	delete obj_scaleFCF;
-	cout << "-----Ende OffsetScale------" <<endl;
-}
-
-void Interface::allocArrays_BoundaryValues(Parameter* para) {
-
-	cout << "-----Config Arrays BoundaryValues------" <<endl;
-	int t = 6;
-
-
-	BoundaryValues **BC_Values = new BoundaryValues*[t];
-	this->sortSystem(BC_Values , para, t);
-
-	way = new string[t];
-
-	for (int i = 0; i < t; i++){
-		this->way[i] = BC_Values[i]->getWay();
-		cout << this->system[i] <<" Boundary: " << way[i] << endl;
-	}
-
-	BoundaryValues *obj_geomV=new BoundaryValues(para->getgeomBoundaryBcValues(), para, "geo");
-
-	int level = BC_Values[0]->getLevel();
-
-
-	vector<vector<vector<doubflo> > > pressureV;
-	pressureV.resize(level+1);
-	vector<vector<vector<doubflo> > > velocityV;
-	velocityV.resize(level+1);
-	//vector<vector<vector<unsigned int> > > periodV;
-	//periodV.resize(level + 1);
-	//vector<vector<unsigned int> > periodIndex;
-	//periodIndex.resize(level + 1);
-	vector<vector<vector<doubflo> > > outflowV;
-	outflowV.resize(level+1);
-
-	for(int i=0; i<=level; i++) {
-		pressureV[i].resize(2); 
-		velocityV[i].resize(3);
-		//periodV[i].resize(1);
-		outflowV[i].resize(2); 
-	}
-
-	//////////////////////////////////////////////////////////////////////////
-	//added by Martin S.
-	//////////////////////////////////////////////////////////////////////////
-	////1D domain decomposition
-	//vector< BoundaryValues* > procNeighborsSend;
-	//vector< BoundaryValues* > procNeighborsRecv;
-	//vector< int > neighborRank;
-
-	//if (para->getNumprocs()>1)
-	//{
-	//	for (int i = 0; i < para->getNumprocs(); i++)
-	//	{
-	//		BoundaryValues *pnSend = new BoundaryValues(i, para, "send");
-	//		BoundaryValues *pnRecv = new BoundaryValues(i, para, "recv");
-	//		if (para->getIsNeighbor())
-	//		{
-	//			procNeighborsSend.push_back(pnSend);
-	//			procNeighborsRecv.push_back(pnRecv);
-	//			neighborRank.push_back(i);
-	//		}
-	//	}
-	//}
-	////////////////////////////////////////////////////////////////////////
-	//3D domain decomposition
-	vector< BoundaryValues* > procNeighborsSendX, procNeighborsSendY, procNeighborsSendZ;
-	vector< BoundaryValues* > procNeighborsRecvX, procNeighborsRecvY, procNeighborsRecvZ;
-	vector< int >             neighborRankX,      neighborRankY,      neighborRankZ;
-
-	procNeighborsSendX.resize(0);
-	procNeighborsSendY.resize(0);
-	procNeighborsSendZ.resize(0);
-	procNeighborsRecvX.resize(0);
-	procNeighborsRecvY.resize(0);
-	procNeighborsRecvZ.resize(0);
-	neighborRankX.resize(0);
-	neighborRankY.resize(0);
-	neighborRankZ.resize(0);
-
-	if (para->getNumprocs()>1)
-	{
-		for (int i = 0; i < para->getNumprocs(); i++)
-		{
-			BoundaryValues *pnXsend = new BoundaryValues(i, para, "send", "X");
-			BoundaryValues *pnYsend = new BoundaryValues(i, para, "send", "Y");
-			BoundaryValues *pnZsend = new BoundaryValues(i, para, "send", "Z");
-			BoundaryValues *pnXrecv = new BoundaryValues(i, para, "recv", "X");
-			BoundaryValues *pnYrecv = new BoundaryValues(i, para, "recv", "Y");
-			BoundaryValues *pnZrecv = new BoundaryValues(i, para, "recv", "Z");
-			if (para->getIsNeighborX())
-			{
-				procNeighborsSendX.push_back(pnXsend);
-				procNeighborsRecvX.push_back(pnXrecv);
-				neighborRankX.push_back(i);
-				cout << "MyID: " << para->getMyID() << ", neighborRankX: " << i << endl; 
-			}
-			if (para->getIsNeighborY())
-			{
-				procNeighborsSendY.push_back(pnYsend);
-				procNeighborsRecvY.push_back(pnYrecv);
-				neighborRankY.push_back(i);
-				cout << "MyID: " << para->getMyID() << ", neighborRankY: " << i << endl; 
-			}
-			if (para->getIsNeighborZ())
-			{
-				procNeighborsSendZ.push_back(pnZsend);
-				procNeighborsRecvZ.push_back(pnZrecv);
-				neighborRankZ.push_back(i);
-				cout << "MyID: " << para->getMyID() << ", neighborRankZ: " << i << endl; 
-			}
-		}
-		cout << "MyID: " << para->getMyID() << ", size of neighborRankX: " << neighborRankX.size() << ", size of neighborRankY: " << neighborRankY.size() << ", size of neighborRankZ: " << neighborRankZ.size() << endl; 
-	}
-	////////////////////////////////////////////////////////////////////////
-	//3D domain decomposition convection diffusion
-	vector< BoundaryValues* > procNeighborsSendADX, procNeighborsSendADY, procNeighborsSendADZ;
-	vector< BoundaryValues* > procNeighborsRecvADX, procNeighborsRecvADY, procNeighborsRecvADZ;
-	vector< int >             neighborRankADX,      neighborRankADY,      neighborRankADZ;
-
-	procNeighborsSendADX.resize(0);
-	procNeighborsSendADY.resize(0);
-	procNeighborsSendADZ.resize(0);
-	procNeighborsRecvADX.resize(0);
-	procNeighborsRecvADY.resize(0);
-	procNeighborsRecvADZ.resize(0);
-	neighborRankADX.resize(0);
-	neighborRankADY.resize(0);
-	neighborRankADZ.resize(0);
-
-	if (para->getDiffOn()==true && para->getNumprocs()>1)
-	{
-		for (int i = 0; i < para->getNumprocs(); i++)
-		{
-			BoundaryValues *pnADXsend = new BoundaryValues(i, para, "send", "X");
-			BoundaryValues *pnADYsend = new BoundaryValues(i, para, "send", "Y");
-			BoundaryValues *pnADZsend = new BoundaryValues(i, para, "send", "Z");
-			BoundaryValues *pnADXrecv = new BoundaryValues(i, para, "recv", "X");
-			BoundaryValues *pnADYrecv = new BoundaryValues(i, para, "recv", "Y");
-			BoundaryValues *pnADZrecv = new BoundaryValues(i, para, "recv", "Z");
-			if (para->getIsNeighborX())
-			{
-				procNeighborsSendADX.push_back(pnADXsend);
-				procNeighborsRecvADX.push_back(pnADXrecv);
-				neighborRankADX.push_back(i);
-			}
-			if (para->getIsNeighborY())
-			{
-				procNeighborsSendADY.push_back(pnADYsend);
-				procNeighborsRecvADY.push_back(pnADYrecv);
-				neighborRankADY.push_back(i);
-			}
-			if (para->getIsNeighborZ())
-			{
-				procNeighborsSendADZ.push_back(pnADZsend);
-				procNeighborsRecvADZ.push_back(pnADZrecv);
-				neighborRankADZ.push_back(i);
-			}
-		}
-	}
-
-	//////////////////////////////////////////////////////////////////////////
-	//cout << "Laenge 1 periodV: " << periodV.size() << endl;
-	//cout << "Laenge 2 periodV: " << periodV[0].size() << endl;
-	//cout << "Laenge 3 periodV: " << periodV[0][0].size() << endl;
-
-
-	////----------------------------------------Vektoren Initialisierung--------------
-	string way_temp;
-	for (int i = 0; i < t; i++){
-		if (this->way[i] == "velocity") { velocityV = BC_Values[i]->setgetBoundarys(velocityV); }
-		else if (this->way[i] == "pressure") { pressureV = BC_Values[i]->setgetBoundarys(pressureV); }
-		else if (this->way[i] == "outflow") { outflowV = BC_Values[i]->setgetBoundarys(outflowV); }
-		//else if (this->way[i] == "periodic_x" || this->way[i] == "periodic_y" || this->way[i] == "periodic_z") { periodV = BC_Values[i]->setgetBoundarys(periodV); way_temp = BC_Values[i]->getWay(); periodIndex = BC_Values[i]->setgetIndex(periodIndex); }
-
-		//cout << "Laenge periodIndex: " << periodIndex[i].size() << endl;
-		//cout << "Laenge 1 periodV: " << periodV.size() << endl;
-		//cout << "Laenge 2 periodV: " << periodV[i].size() << endl;
-		//cout << "Laenge 3 periodV: " << periodV[i][0].size() << endl;
-
-		//if (way_temp != "")
-		//{
-		//	this->initPeriodicNeigh(periodV, periodIndex, way_temp);
-
-		//		for (int i = 0; i<=level; i++)
-		//		{
-		//			////////////////////////////////////////////////////////////////////////
-		//			neighX->initArray(para->getParH(i)->neighborX_SP,i);
-		//			cout << " Test 3 " << endl;
-		//			neighY->initArray(para->getParH(i)->neighborY_SP,i);
-		//			cout << " Test 3 " << endl;
-		//			neighZ->initArray(para->getParH(i)->neighborZ_SP,i);
-		//			cout << " Test 3 " << endl;
-		//			////////////////////////////////////////////////////////////////////////
-		//			para->cudaCopySP(i);
-		//			////////////////////////////////////////////////////////////////////////
-		//		}
-
-		//		cout << " Test 3 " << endl;
-
-		//	//periodV wird für jede Seite resetet 
-		//	for (int j = 0; j <= level; j++){
-		//		periodV[j].clear();
-		//	}
-		//	periodV.clear();
-		//	periodIndex.clear();
-
-		//	cout << " Test 2 " << endl;
-		//	periodV.resize(level + 1);
-		//	periodIndex.resize(level + 1);
-		//	for (int i = 0; i <= level; i++) {
-		//		periodV[i].resize(1);
-		//	}
-		//	way_temp = "";
-
-		//}
-	}
-	//cout << " Test 4 " << endl;
-
-	////------------------------//------------------------//------------------------//------------------------//------------------------//------------------------//------------------------//------------------------
-	//
-	////------------------------//------------------------//------------------------//------------------------//------------------------//------------------------//------------------------//------------------------
-
-
-
-	////Soeren TEST---------------------------------------------------------------------------------------------------------------------------------------------------
-	//if (TEST == true) {
-	//	for (int i = 0; i <= level; i++) {
-	//		int temp = (int)velocityV[i][0].size();
-	//		cout << "Groesse Velocity Values lvl " << i << " : " << temp << endl;
-	//	}
-	//	for (int i = 0; i <= level; i++) {
-	//		int temp = (int)pressureV[i][0].size();
-	//		cout << "Groesse Pressure Values lvl " << i << " : " << temp << endl;
-	//	}
-
-	//	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//	int ausgabe = 5;
-	//	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//	for (int j = 0; j <= level; j++) {
-	//		if (pressureV[j][0].size() > 0){
-	//			for (int i = 0; i < ausgabe; i++) {
-	//				cout << "Pressure Values level " << j << ", eintrag " << i << " : " << pressureV[j][0][i] << " | " << pressureV[j][1][i] << endl;
-	//			}
-	//			for (unsigned int i = pressureV[j][0].size() - ausgabe; i < pressureV[j][0].size(); i++) {
-	//				cout << "Pressure Values level " << j << ", eintrag " << i << " : " << pressureV[j][0][i] << " | " << pressureV[j][1][i] << endl;
-	//			}
-	//		}
-	//	}
-	//	for (int j = 0; j <= level; j++) {
-	//		if (velocityV[j][0].size() >0){
-	//			for (int i = 0; i < ausgabe; i++) {
-	//				cout << "Velocity Values level " << j << ", eintrag " << i << " : " << velocityV[j][0][i] << " | " << velocityV[j][1][i] << " | " << velocityV[j][2][i] << endl;
-	//			}
-	//			for (unsigned int i = velocityV[j][0].size() - ausgabe; i < velocityV[j][0].size(); i++) {
-	//				cout << "velocity Values level " << j << ", eintrag " << i << " : " << velocityV[j][0][i] << " | " << velocityV[j][1][i] << " | " << velocityV[j][2][i] << endl;
-	//			}
-	//		}
-	//	}
-	//	
-
-
-	//	//TEST NACHBARN
-
-	//	//for (int i = 300; i <= 500; i++) {
-	//	//	cout << "nachbarX index " << i << " : " << neighX->getVec(0)[i] << endl;
-	//	//}
-
-	//	//for (int i = 300; i <= 800; i++) {
-	//	//	cout << "nachbarY index " << i << " : " << neighY->getVec(0)[i] << endl;
-	//	//}
-
-	//}
-
-
-	//ENDE TEST Soeren---------------------------------------------------------------------------------------------------------------------------------------------------
-	
-
-
-
-	//---------------------------------------------------------------------//AB HIER CODE FUER MARTIN////-------------------------------------------------------------------//
-	for (int i = 0; i <= level; i++) {
-		int temp1 = (int)pressureV[i][0].size();
-		if (temp1 > 1)
-		{
-			cout << "Groesse pressure level " << i << " : " << temp1 << endl;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->getParH(i)->QPress.kQ = temp1;
-			para->getParD(i)->QPress.kQ = temp1;
-			para->getParH(i)->kPressQread = temp1 * para->getD3Qxx();
-			para->getParD(i)->kPressQread = temp1 * para->getD3Qxx();
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaAllocPress(i);
-			///////////////////////////////
-			////only for round of error test
-			//para->cudaAllocTestRE(i, temp1);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-			int d = 0;
-			int j = 0;
-			int n = 0;
-
-			for (vector<vector<vector<doubflo> > >::iterator it = pressureV.begin(); it != pressureV.end(); it++) {
-				if (i == d) {
-					for (vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-						for (vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-							if (j == 0) para->getParH(i)->QPress.RhoBC[n] = *it3;
-							if (j == 1) para->getParH(i)->QPress.kN[n] = (int)*it3;
-							n++;
-						}
-						j++; // zaehlt die Spalte mit		
-						n = 0;
-					}
-				}
-				d++; // zaehlt das Level mit
-				j = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			for (int m = 0; m < temp1; m++)
-			{
-				para->getParH(i)->QPress.RhoBC[m] = (para->getParH(i)->QPress.RhoBC[m] / para->getFactorPressBC());
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaCopyPress(i);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			////only for round of error test
-			//para->cudaCopyTestREtoDevice(i,temp1);
-			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//// advection - diffusion stuff
-			////cout << "vor advec diff" << endl;
-			//if (para->getDiffOn()==true){
-			//	//////////////////////////////////////////////////////////////////////////
-			//	//cout << "vor setzen von kTemp" << endl;
-			//	para->getParH(i)->TempPress.kTemp = temp1;
-			//	//cout << "Groesse kTemp = " << para->getParH(i)->TempPress.kTemp << endl;
-			//	//////////////////////////////////////////////////////////////////////////
-			//	para->cudaAllocTempPressBC(i);
-			//	//cout << "nach alloc" << endl;
-			//	//////////////////////////////////////////////////////////////////////////
-			//	for (int m = 0; m < temp1; m++)
-			//	{
-			//		para->getParH(i)->TempPress.temp[m] = para->getTemperatureInit();
-			//		para->getParH(i)->TempPress.velo[m] = (doubflo)0.0;
-			//		para->getParH(i)->TempPress.k[m]    = para->getParH(i)->QPress.k[m];
-			//	}
-			//	//////////////////////////////////////////////////////////////////////////
-			//	//cout << "vor copy" << endl;
-			//	para->cudaCopyTempPressBCHD(i);
-			//	//cout << "nach copy" << endl;
-			//	//////////////////////////////////////////////////////////////////////////
-			//}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		}//ende if
-	}//ende oberste for schleife
-
-
-
-
-	//--------------------------------------------------------------------------//
-	for (int i = 0; i <= level; i++) {
-		int temp2 = (int)velocityV[i][0].size();
-		if (temp2 > 1)
-		{
-			cout << "Groesse velocity level " << i << " : " << temp2 << endl;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			int blocks = (temp2 / para->getParH(i)->numberofthreads) + 1;
-			para->getParH(i)->Qinflow.kArray = blocks * para->getParH(i)->numberofthreads;
-			para->getParD(i)->Qinflow.kArray = para->getParH(i)->Qinflow.kArray;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->getParH(i)->Qinflow.kQ = temp2;
-			para->getParD(i)->Qinflow.kQ = temp2;
-			para->getParH(i)->kInflowQ = temp2;
-			para->getParD(i)->kInflowQ = temp2;
-			para->getParH(i)->kInflowQread = temp2 * para->getD3Qxx();
-			para->getParD(i)->kInflowQread = temp2 * para->getD3Qxx();
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaAllocVeloBC(i);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			int d = 0;
-			int j = 0;
-			int n = 0;
-			for (vector<vector<vector<doubflo> > >::iterator it = velocityV.begin(); it != velocityV.end(); it++) {
-				if (i == d) {
-					for (vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-						for (vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-							if (j == 0) para->getParH(i)->Qinflow.Vx[n] = *it3;
-							if (j == 1) para->getParH(i)->Qinflow.Vy[n] = *it3;
-							if (j == 2) para->getParH(i)->Qinflow.Vz[n] = *it3;
-							n++;
-						}
-						j++; // zaehlt die Spalte mit		
-						//cout << "n = " << n << endl;
-						n = 0;
-					}
-				}
-				d++; // zaehlt das Level mit
-				j = 0;
-			}
-			//cout << "temp2 = " << temp2 << endl;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			for (int m = 0; m < temp2; m++)
-			{
-				//para->getParH(i)->Qinflow.Vx[m] = para->getParH(i)->Qinflow.Vx[m] / para->getVelocityRatio();
-				//para->getParH(i)->Qinflow.Vy[m] = para->getParH(i)->Qinflow.Vy[m] / para->getVelocityRatio();
-				//para->getParH(i)->Qinflow.Vz[m] = para->getParH(i)->Qinflow.Vz[m] / para->getVelocityRatio();
-				para->getParH(i)->Qinflow.Vx[m] = para->getVelocity();//0.035;
-				para->getParH(i)->Qinflow.Vy[m] = 0.0;//para->getVelocity();//0.0;
-				para->getParH(i)->Qinflow.Vz[m] = 0.0;
-				//if (para->getParH(i)->Qinflow.Vz[m] > 0)
-				//{
-				//	cout << "velo Z = " << para->getParH(i)->Qinflow.Vz[m] << endl;
-				//}
-			}
-			
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaCopyVeloBC(i);
-			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//// advection - diffusion stuff
-			//if (para->getDiffOn()==true){
-			//	//////////////////////////////////////////////////////////////////////////
-			//	para->getParH(i)->TempVel.kTemp = temp2;
-			//	//cout << "Groesse kTemp = " << para->getParH(i)->TempPress.kTemp << endl;
-			//	cout << "getTemperatureInit = " << para->getTemperatureInit() << endl;
-			//	cout << "getTemperatureBC = " << para->getTemperatureBC() << endl;
-			//	//////////////////////////////////////////////////////////////////////////
-			//	para->cudaAllocTempVeloBC(i);
-			//	//cout << "nach alloc " << endl;
-			//	//////////////////////////////////////////////////////////////////////////
-			//	for (int m = 0; m < temp2; m++)
-			//	{
-			//		para->getParH(i)->TempVel.temp[m]      = para->getTemperatureInit();
-			//		para->getParH(i)->TempVel.tempPulse[m] = para->getTemperatureBC();
-			//		para->getParH(i)->TempVel.velo[m]      = para->getVelocity();
-			//		para->getParH(i)->TempVel.k[m]         = para->getParH(i)->Qinflow.k[m];
-			//	}
-			//	//////////////////////////////////////////////////////////////////////////
-			//	//cout << "vor copy " << endl;
-			//	para->cudaCopyTempVeloBCHD(i);
-			//	//cout << "nach copy " << endl;
-			//	//////////////////////////////////////////////////////////////////////////
-			//}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		}//ende if
-	}//ende oberste for schleife
-
-
-	//cout << "Test 1 " << endl;
-
-	//--------------------------------------------------------------------------//
-	for (int i = 0; i <= level; i++) {
-		int temp = (int)outflowV[i][0].size();
-		if (temp > 1)
-		{
-			cout << "Groesse outflow level " << i << " : " << temp << endl;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->getParH(i)->Qoutflow.kQ = temp;
-			para->getParD(i)->Qoutflow.kQ = temp;
-			para->getParH(i)->kOutflowQread = temp * para->getD3Qxx();
-			para->getParD(i)->kOutflowQread = temp * para->getD3Qxx();
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaAllocOutflowBC(i);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-			int d = 0;
-			int j = 0;
-			int n = 0;
-
-			for (vector<vector<vector<doubflo> > >::iterator it = outflowV.begin(); it != outflowV.end(); it++) {
-				if (i == d) {
-					for (vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-						for (vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-							if (j == 0) para->getParH(i)->Qoutflow.RhoBC[n] = *it3;
-							if (j == 1) para->getParH(i)->Qoutflow.kN[n] = (int)*it3;
-							n++;
-						}
-						j++; // zaehlt die Spalte mit		
-						n = 0;
-					}
-				}
-				d++; // zaehlt das Level mit
-				j = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			for (int m = 0; m < temp; m++)
-			{
-				para->getParH(i)->Qoutflow.RhoBC[m] = (para->getParH(i)->Qoutflow.RhoBC[m] / para->getFactorPressBC()) * (doubflo)0.0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaCopyOutflowBC(i);
-			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		}//ende if
-	}//ende oberste for schleife
-
-
-
-
-	//--------------------------------------------------------------------------//
-	if (para->getIsGeometryValues()){
-		for (int i = 0; i <= level; i++) {
-			int temp4 = obj_geomV->getSize(i);
-			if (temp4 > 0)
-			{
-				cout << "Groesse der Daten obj_geomV, Level " << i << " : " << temp4 << endl;
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				para->getParH(i)->QGeom.kQ = temp4;
-				para->getParD(i)->QGeom.kQ = temp4;
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				para->cudaAllocGeomValuesBC(i);
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				//Indexarray
-				obj_geomV->initArray(para->getParH(i)->QGeom.Vx, i, 0);
-				obj_geomV->initArray(para->getParH(i)->QGeom.Vy, i, 1);
-				obj_geomV->initArray(para->getParH(i)->QGeom.Vz, i, 2);
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				for (int m = 0; m < temp4; m++)
-				{
-					para->getParH(i)->QGeom.Vx[m] = para->getParH(i)->QGeom.Vx[m] / para->getVelocityRatio();
-					para->getParH(i)->QGeom.Vy[m] = para->getParH(i)->QGeom.Vy[m] / para->getVelocityRatio();
-					para->getParH(i)->QGeom.Vz[m] = para->getParH(i)->QGeom.Vz[m] / para->getVelocityRatio();
-					//para->getParH(i)->QGeom.Vx[m] = para->getParH(i)->QGeom.Vx[m] / 100.0f;
-					//para->getParH(i)->QGeom.Vy[m] = para->getParH(i)->QGeom.Vy[m] / 100.0f;
-					//para->getParH(i)->QGeom.Vz[m] = para->getParH(i)->QGeom.Vz[m] / 100.0f;
-					//para->getParH(i)->QGeom.Vx[m] = 0.0f;
-					//para->getParH(i)->QGeom.Vy[m] = 0.0f;
-					//para->getParH(i)->QGeom.Vz[m] = 0.0f;
-				}
-				//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				////Täst
-				//for (int m = 0; m < temp4; m++)
-				//{
-				//	para->getParH(i)->QGeom.Vx[m] = para->getVelocity();//0.035f;
-				//	para->getParH(i)->QGeom.Vy[m] = 0.0f;//para->getVelocity();//0.0f;
-				//	para->getParH(i)->QGeom.Vz[m] = 0.0f;
-				//}
-				//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				para->cudaCopyGeomValuesBC(i);
-				//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				//// advection - diffusion stuff
-				//if (para->getDiffOn()==true){
-				//	//////////////////////////////////////////////////////////////////////////
-				//	para->getParH(i)->Temp.kTemp = temp4;
-				//	cout << "Groesse kTemp = " << para->getParH(i)->Temp.kTemp << endl;
-				//	//////////////////////////////////////////////////////////////////////////
-				//	para->cudaAllocTempNoSlipBC(i);
-				//	//////////////////////////////////////////////////////////////////////////
-				//	for (int m = 0; m < temp4; m++)
-				//	{
-				//		para->getParH(i)->Temp.temp[m] = para->getTemperatureInit();
-				//		para->getParH(i)->Temp.k[m]    = para->getParH(i)->QGeom.k[m];
-				//	}
-				//	//////////////////////////////////////////////////////////////////////////
-				//	para->cudaCopyTempNoSlipBCHD(i);
-				//	//////////////////////////////////////////////////////////////////////////
-				//}
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			}
-		}
-	}//ende geo
-
-	//cout << "Test 2 " << endl;
-
-	////--------------------------------------------------------------------------//
-	//if (para->getIsProp()){
-	//	BoundaryValues *obj_propV=new BoundaryValues(para->getpropellerValues(), para, "prop");
-	//	for (int i = 0; i <= level; i++) {
-	//		int temp4 = obj_propV->getSize(i);
-	//		if (temp4 > 0)
-	//		{
-	//			cout << "Groesse der Daten PropellerValues, Level " << i << " : " << temp4 << endl;
-	//			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//			para->getParH(i)->QPropeller.kQ = temp4;
-	//			para->getParD(i)->QPropeller.kQ = temp4;
-	//			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//			para->cudaAllocVeloPropeller(i);
-	//			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//			//Indexarray
-	//			obj_propV->initIndex(para->getParH(i)->QPropeller.k, i);
-	//			obj_propV->initArray(para->getParH(i)->QPropeller.Vx, i, 0);
-	//			obj_propV->initArray(para->getParH(i)->QPropeller.Vy, i, 1);
-	//			obj_propV->initArray(para->getParH(i)->QPropeller.Vz, i, 2);
-	//			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//			for (int m = 0; m < temp4; m++)
-	//			{
-	//				para->getParH(i)->QPropeller.Vx[m] = para->getParH(i)->QPropeller.Vx[m] / para->getVelocityRatio();
-	//				para->getParH(i)->QPropeller.Vy[m] = para->getParH(i)->QPropeller.Vy[m] / para->getVelocityRatio();
-	//				para->getParH(i)->QPropeller.Vz[m] = para->getParH(i)->QPropeller.Vz[m] / para->getVelocityRatio();
-	//			}
-	//			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//			para->cudaCopyVeloPropeller(i);
-	//			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//		}
-	//	}
-	//}//ende prop
-
-	//cout << "Test 3 " << endl;
-
-
-	//--------------------------------------------------------------------------//
-	//BoundaryValues *obj_cpTop=new BoundaryValues(para->getcpTop(), para, "cp");
-	//BoundaryValues *obj_cpBottom=new BoundaryValues(para->getcpBottom(), para, "cp");
-	//BoundaryValues *obj_cpBottom2=new BoundaryValues(para->getcpBottom2(), para, "cp");
-	//if (para->getIsCp()){
-	//	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//	//Top
-	//	for (int i = 0; i <= level; i++) {
-	//		int temp = obj_cpTop->getSize(i);
-	//		if (temp > 0)
-	//		{
-	//			cout << "Groesse der Daten CpTop, Level " << i << " : " << temp << endl;
-	//			////////////////////////////////////////////////////////////////////////////
-	//			para->getParH(i)->numberOfPointsCpTop = temp;
-	//			para->getParD(i)->numberOfPointsCpTop = temp;
-	//			////////////////////////////////////////////////////////////////////////////
-	//			para->cudaAllocCpTop(i);
-	//			////////////////////////////////////////////////////////////////////////////
-	//			//Indexarray
-	//			obj_cpTop->initIndex(para->getParH(i)->cpTopIndex, i);
-	//			////////////////////////////////////////////////////////////////////////////
-	//			for (int m = 0; m < temp; m++)
-	//			{
-	//				para->getParH(i)->cpPressTop[m] = 0.0;
-	//			}
-	//			////////////////////////////////////////////////////////////////////////////
-	//			para->cudaCopyCpTopInit(i);
-	//			////////////////////////////////////////////////////////////////////////////
-	//		}
-	//	}
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		////Bottom
-		//for (int i = 0; i <= level; i++) {
-		//	int temp = obj_cpBottom->getSize(i);
-		//	if (temp > 0)
-		//	{
-		//		cout << "Groesse der Daten CpBottom, Level " << i << " : " << temp << endl;
-		//		////////////////////////////////////////////////////////////////////////////
-		//		para->getParH(i)->numberOfPointsCpBottom = temp;
-		//		para->getParD(i)->numberOfPointsCpBottom = temp;
-		//		////////////////////////////////////////////////////////////////////////////
-		//		para->cudaAllocCpBottom(i);
-		//		////////////////////////////////////////////////////////////////////////////
-		//		//Indexarray
-		//		obj_cpBottom->initIndex(para->getParH(i)->cpBottomIndex, i);
-		//		////////////////////////////////////////////////////////////////////////////
-		//		for (int m = 0; m < temp; m++)
-		//		{
-		//			para->getParH(i)->cpPressBottom[m] = 0.0;
-		//		}
-		//		////////////////////////////////////////////////////////////////////////////
-		//		para->cudaCopyCpBottomInit(i);
-		//		////////////////////////////////////////////////////////////////////////////
-		//	}
-		//}
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		////Bottom 2
-		//for (int i = 0; i <= level; i++) {
-		//	int temp = obj_cpBottom2->getSize(i);
-		//	if (temp > 0)
-		//	{
-		//		cout << "Groesse der Daten CpBottom2, Level " << i << " : " << temp << endl;
-		//		////////////////////////////////////////////////////////////////////////////
-		//		para->getParH(i)->numberOfPointsCpBottom2 = temp;
-		//		para->getParD(i)->numberOfPointsCpBottom2 = temp;
-		//		////////////////////////////////////////////////////////////////////////////
-		//		para->cudaAllocCpBottom2(i);
-		//		////////////////////////////////////////////////////////////////////////////
-		//		//Indexarray
-		//		obj_cpBottom2->initIndex(para->getParH(i)->cpBottom2Index, i);
-		//		////////////////////////////////////////////////////////////////////////////
-		//		for (int m = 0; m < temp; m++)
-		//		{
-		//			para->getParH(i)->cpPressBottom2[m] = 0.0;
-		//		}
-		//		////////////////////////////////////////////////////////////////////////////
-		//		para->cudaCopyCpBottom2Init(i);
-		//		////////////////////////////////////////////////////////////////////////////
-		//	}
-		//}
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//	delete obj_cpTop;
-	//	//delete obj_cpBottom;
-	//	//delete obj_cpBottom2;
-	//}//ende cp
-
-	//cout << "Test 4 " << endl;
-
-
-	//--------------------------------------------------------------------------//
-	if (para->getConcFile()){
-		BoundaryValues *obj_Conc=new BoundaryValues(para->getConcentration());
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//concentration
-		for (int i = 0; i <= level; i++) {
-			int temp = obj_Conc->getSize(i);
-			if (temp > 0)
-			{
-				cout << "Groesse der Daten Concentration, Level " << i << " : " << temp << endl;
-				////////////////////////////////////////////////////////////////////////////
-				para->getParH(i)->numberOfPointsConc = temp;
-				para->getParD(i)->numberOfPointsConc = temp;
-				////////////////////////////////////////////////////////////////////////////
-				para->cudaAllocConcFile(i);
-				////////////////////////////////////////////////////////////////////////////
-				//Indexarray
-				obj_Conc->initIndex(para->getParH(i)->concIndex, i);
-				////////////////////////////////////////////////////////////////////////////
-				para->cudaCopyConcFile(i);
-				////////////////////////////////////////////////////////////////////////////
-			}
-		}
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		delete obj_Conc;
-	}//end concentration
-
-	//cout << "Test 5 " << endl;
-
-
-
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//processor boundary (Martin Sch.) 
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	////1D domain decomposition
-	//if ( (para->getNumprocs() > 1) && (procNeighborsSend.size() == procNeighborsRecv.size()) )
-	//{
-	//	for (int j = 0; j < procNeighborsSend.size(); j++)
-	//	{
-	//		for (int i = 0; i <= level; i++) {
-	//			int tempSend = procNeighborsSend[j]->getSize(i);
-	//			int tempRecv = procNeighborsRecv[j]->getSize(i);
-	//			if (tempSend > 0)
-	//			{
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				//send
-	//				cout << "Groesse der Daten für den Sendepuffer, Level " << i << " : " << tempSend << endl;
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				para->setNumberOfProcessNeighbors((unsigned int)procNeighborsSend.size(), i, "send");
-	//				para->getParH(i)->sendProcessNeighbor[j].rankNeighbor = neighborRank[j];
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				para->getParH(i)->sendProcessNeighbor[j].numberOfNodes = tempSend;
-	//				para->getParD(i)->sendProcessNeighbor[j].numberOfNodes = tempSend;
-	//				para->getParH(i)->sendProcessNeighbor[j].numberOfFs    = para->getD3Qxx() * tempSend;
-	//				para->getParD(i)->sendProcessNeighbor[j].numberOfFs    = para->getD3Qxx() * tempSend;
-	//				para->getParH(i)->sendProcessNeighbor[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-	//				para->getParD(i)->sendProcessNeighbor[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-	//				para->getParH(i)->sendProcessNeighbor[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-	//				para->getParD(i)->sendProcessNeighbor[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				//cout << "Groesse send numberOfNodes Host, Level " << i << " : " << para->getParH(i)->sendProcessNeighbor[j].numberOfNodes << endl;
-	//				//cout << "Groesse send numberOfNodes Device, Level " << i << " : " << para->getParD(i)->sendProcessNeighbor[j].numberOfNodes << endl;
-	//				//cout << "Groesse send numberOfFs Host, Level " << i << " : " << para->getParH(i)->sendProcessNeighbor[j].numberOfFs << endl;
-	//				//cout << "Groesse send numberOfFs Device, Level " << i << " : " << para->getParD(i)->sendProcessNeighbor[j].numberOfFs << endl;
-	//				//cout << "Groesse send memsizeIndex Host, Level " << i << " : " << para->getParH(i)->sendProcessNeighbor[j].memsizeIndex << endl;
-	//				//cout << "Groesse send memsizeIndex Device, Level " << i << " : " << para->getParD(i)->sendProcessNeighbor[j].memsizeIndex << endl;
-	//				//cout << "Groesse send memsizeFs Host, Level " << i << " : " << para->getParH(i)->sendProcessNeighbor[j].memsizeFs << endl;
-	//				//cout << "Groesse send memsizeFs Device, Level " << i << " : " << para->getParD(i)->sendProcessNeighbor[j].memsizeFs << endl;
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				//recv
-	//				cout << "Groesse der Daten für den Empfangspuffer, Level " << i << " : " << tempRecv << endl;
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				para->setNumberOfProcessNeighbors((unsigned int)procNeighborsRecv.size(), i, "recv");
-	//				para->getParH(i)->recvProcessNeighbor[j].rankNeighbor = neighborRank[j];
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				para->getParH(i)->recvProcessNeighbor[j].numberOfNodes = tempRecv;
-	//				para->getParD(i)->recvProcessNeighbor[j].numberOfNodes = tempRecv;
-	//				para->getParH(i)->recvProcessNeighbor[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-	//				para->getParD(i)->recvProcessNeighbor[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-	//				para->getParH(i)->recvProcessNeighbor[j].memsizeIndex = sizeof(unsigned int)*tempRecv;
-	//				para->getParD(i)->recvProcessNeighbor[j].memsizeIndex = sizeof(unsigned int)*tempRecv;
-	//				para->getParH(i)->recvProcessNeighbor[j].memsizeFs    = sizeof(doubflo)     *tempRecv;
-	//				para->getParD(i)->recvProcessNeighbor[j].memsizeFs    = sizeof(doubflo)     *tempRecv;
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				//cout << "Groesse recv numberOfNodes Host, Level " << i << " : " << para->getParH(i)->recvProcessNeighbor[j].numberOfNodes << endl;
-	//				//cout << "Groesse recv numberOfNodes Device, Level " << i << " : " << para->getParD(i)->recvProcessNeighbor[j].numberOfNodes << endl;
-	//				//cout << "Groesse recv numberOfFs Host, Level " << i << " : " << para->getParH(i)->recvProcessNeighbor[j].numberOfFs << endl;
-	//				//cout << "Groesse recv numberOfFs Device, Level " << i << " : " << para->getParD(i)->recvProcessNeighbor[j].numberOfFs << endl;
-	//				//cout << "Groesse recv memsizeIndex Host, Level " << i << " : " << para->getParH(i)->recvProcessNeighbor[j].memsizeIndex << endl;
-	//				//cout << "Groesse recv memsizeIndex Device, Level " << i << " : " << para->getParD(i)->recvProcessNeighbor[j].memsizeIndex << endl;
-	//				//cout << "Groesse recv memsizeFs Host, Level " << i << " : " << para->getParH(i)->recvProcessNeighbor[j].memsizeFs << endl;
-	//				//cout << "Groesse recv memsizeFs Device, Level " << i << " : " << para->getParD(i)->recvProcessNeighbor[j].memsizeFs << endl;
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				//malloc on host and device
-	//				para->cudaAllocProcessNeighbor(i, j);
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				//init index arrays
-	//				procNeighborsSend[j]->initIndex(para->getParH(i)->sendProcessNeighbor[j].index, i);
-	//				procNeighborsRecv[j]->initIndex(para->getParH(i)->recvProcessNeighbor[j].index, i);
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//				para->cudaCopyProcessNeighborIndex(i, j);
-	//				////////////////////////////////////////////////////////////////////////////////////////
-	//			}
-	//		}
-	//	}
-	//}//ende processor boundarys
-	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//3D domain decomposition
-	// X
-	if ( (para->getNumprocs() > 1) && (procNeighborsSendX.size() == procNeighborsRecvX.size()) )
-	{
-		for (int j = 0; j < procNeighborsSendX.size(); j++)
-		{
-			for (int i = 0; i <= level; i++) {
-				int tempSend = procNeighborsSendX[j]->getSize(i);
-				int tempRecv = procNeighborsRecvX[j]->getSize(i);
-				if (tempSend > 0)
-				{
-					////////////////////////////////////////////////////////////////////////////////////////
-					//send
-					cout << "Groesse der Daten für den X Sendepuffer, Level " << i << " : " << tempSend << endl;
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->setNumberOfProcessNeighborsX((unsigned int)procNeighborsSendX.size(), i, "send");
-					para->getParH(i)->sendProcessNeighborX[j].rankNeighbor = neighborRankX[j];
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->getParH(i)->sendProcessNeighborX[j].numberOfNodes = tempSend;
-					para->getParD(i)->sendProcessNeighborX[j].numberOfNodes = tempSend;
-					para->getParH(i)->sendProcessNeighborX[j].numberOfFs    = para->getD3Qxx() * tempSend;
-					para->getParD(i)->sendProcessNeighborX[j].numberOfFs    = para->getD3Qxx() * tempSend;
-					para->getParH(i)->sendProcessNeighborX[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-					para->getParD(i)->sendProcessNeighborX[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-					para->getParH(i)->sendProcessNeighborX[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-					para->getParD(i)->sendProcessNeighborX[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-					////////////////////////////////////////////////////////////////////////////////////////
-					//recv
-					cout << "Groesse der Daten für den X Empfangspuffer, Level " << i << " : " << tempRecv << endl;
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->setNumberOfProcessNeighborsX((unsigned int)procNeighborsRecvX.size(), i, "recv");
-					para->getParH(i)->recvProcessNeighborX[j].rankNeighbor = neighborRankX[j];
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->getParH(i)->recvProcessNeighborX[j].numberOfNodes = tempRecv;
-					para->getParD(i)->recvProcessNeighborX[j].numberOfNodes = tempRecv;
-					para->getParH(i)->recvProcessNeighborX[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-					para->getParD(i)->recvProcessNeighborX[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-					para->getParH(i)->recvProcessNeighborX[j].memsizeIndex = sizeof(unsigned int)*tempRecv;
-					para->getParD(i)->recvProcessNeighborX[j].memsizeIndex = sizeof(unsigned int)*tempRecv;
-					para->getParH(i)->recvProcessNeighborX[j].memsizeFs    = sizeof(doubflo)     *tempRecv;
-					para->getParD(i)->recvProcessNeighborX[j].memsizeFs    = sizeof(doubflo)     *tempRecv;
-					////////////////////////////////////////////////////////////////////////////////////////
-					//malloc on host and device
-					para->cudaAllocProcessNeighborX(i, j);
-					////////////////////////////////////////////////////////////////////////////////////////
-					//init index arrays
-					procNeighborsSendX[j]->initIndex(para->getParH(i)->sendProcessNeighborX[j].index, i);
-					procNeighborsRecvX[j]->initIndex(para->getParH(i)->recvProcessNeighborX[j].index, i);
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->cudaCopyProcessNeighborXIndex(i, j);
-					////////////////////////////////////////////////////////////////////////////////////////
-				}
-			}
-		}
-	}//ende X processor boundarys
-	//////////////////////////////////////////////////////////////////////////
-	// Y
-	if ( (para->getNumprocs() > 1) && (procNeighborsSendY.size() == procNeighborsRecvY.size()) )
-	{
-		for (int j = 0; j < procNeighborsSendY.size(); j++)
-		{
-			for (int i = 0; i <= level; i++) {
-				int tempSend = procNeighborsSendY[j]->getSize(i);
-				int tempRecv = procNeighborsRecvY[j]->getSize(i);
-				if (tempSend > 0)
-				{
-					////////////////////////////////////////////////////////////////////////////////////////
-					//send
-					cout << "Groesse der Daten für den Y Sendepuffer, Level " << i << " : " << tempSend << endl;
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->setNumberOfProcessNeighborsY((unsigned int)procNeighborsSendY.size(), i, "send");
-					para->getParH(i)->sendProcessNeighborY[j].rankNeighbor = neighborRankY[j];
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->getParH(i)->sendProcessNeighborY[j].numberOfNodes = tempSend;
-					para->getParD(i)->sendProcessNeighborY[j].numberOfNodes = tempSend;
-					para->getParH(i)->sendProcessNeighborY[j].numberOfFs    = para->getD3Qxx() * tempSend;
-					para->getParD(i)->sendProcessNeighborY[j].numberOfFs    = para->getD3Qxx() * tempSend;
-					para->getParH(i)->sendProcessNeighborY[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-					para->getParD(i)->sendProcessNeighborY[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-					para->getParH(i)->sendProcessNeighborY[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-					para->getParD(i)->sendProcessNeighborY[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-					////////////////////////////////////////////////////////////////////////////////////////
-					//recv
-					cout << "Groesse der Daten für den Y Empfangspuffer, Level " << i << " : " << tempRecv << endl;
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->setNumberOfProcessNeighborsY((unsigned int)procNeighborsRecvY.size(), i, "recv");
-					para->getParH(i)->recvProcessNeighborY[j].rankNeighbor = neighborRankY[j];
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->getParH(i)->recvProcessNeighborY[j].numberOfNodes = tempRecv;
-					para->getParD(i)->recvProcessNeighborY[j].numberOfNodes = tempRecv;
-					para->getParH(i)->recvProcessNeighborY[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-					para->getParD(i)->recvProcessNeighborY[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-					para->getParH(i)->recvProcessNeighborY[j].memsizeIndex = sizeof(unsigned int)*tempRecv;
-					para->getParD(i)->recvProcessNeighborY[j].memsizeIndex = sizeof(unsigned int)*tempRecv;
-					para->getParH(i)->recvProcessNeighborY[j].memsizeFs    = sizeof(doubflo)     *tempRecv;
-					para->getParD(i)->recvProcessNeighborY[j].memsizeFs    = sizeof(doubflo)     *tempRecv;
-					////////////////////////////////////////////////////////////////////////////////////////
-					//malloc on host and device
-					para->cudaAllocProcessNeighborY(i, j);
-					////////////////////////////////////////////////////////////////////////////////////////
-					//init index arrays
-					procNeighborsSendY[j]->initIndex(para->getParH(i)->sendProcessNeighborY[j].index, i);
-					procNeighborsRecvY[j]->initIndex(para->getParH(i)->recvProcessNeighborY[j].index, i);
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->cudaCopyProcessNeighborYIndex(i, j);
-					////////////////////////////////////////////////////////////////////////////////////////
-				}
-			}
-		}
-	}//ende Y processor boundarys
-	//////////////////////////////////////////////////////////////////////////
-	// Z
-	if ( (para->getNumprocs() > 1) && (procNeighborsSendZ.size() == procNeighborsRecvZ.size()) )
-	{
-		for (int j = 0; j < procNeighborsSendZ.size(); j++)
-		{
-			for (int i = 0; i <= level; i++) {
-				int tempSend = procNeighborsSendZ[j]->getSize(i);
-				int tempRecv = procNeighborsRecvZ[j]->getSize(i);
-				if (tempSend > 0)
-				{
-					////////////////////////////////////////////////////////////////////////////////////////
-					//send
-					cout << "Groesse der Daten für den Z Sendepuffer, Level " << i << " : " << tempSend << endl;
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->setNumberOfProcessNeighborsZ((unsigned int)procNeighborsSendZ.size(), i, "send");
-					para->getParH(i)->sendProcessNeighborZ[j].rankNeighbor = neighborRankZ[j];
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->getParH(i)->sendProcessNeighborZ[j].numberOfNodes = tempSend;
-					para->getParD(i)->sendProcessNeighborZ[j].numberOfNodes = tempSend;
-					para->getParH(i)->sendProcessNeighborZ[j].numberOfFs    = para->getD3Qxx() * tempSend;
-					para->getParD(i)->sendProcessNeighborZ[j].numberOfFs    = para->getD3Qxx() * tempSend;
-					para->getParH(i)->sendProcessNeighborZ[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-					para->getParD(i)->sendProcessNeighborZ[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-					para->getParH(i)->sendProcessNeighborZ[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-					para->getParD(i)->sendProcessNeighborZ[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-					////////////////////////////////////////////////////////////////////////////////////////
-					//recv
-					cout << "Groesse der Daten für den Z Empfangspuffer, Level " << i << " : " << tempRecv << endl;
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->setNumberOfProcessNeighborsZ((unsigned int)procNeighborsRecvZ.size(), i, "recv");
-					para->getParH(i)->recvProcessNeighborZ[j].rankNeighbor = neighborRankZ[j];
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->getParH(i)->recvProcessNeighborZ[j].numberOfNodes = tempRecv;
-					para->getParD(i)->recvProcessNeighborZ[j].numberOfNodes = tempRecv;
-					para->getParH(i)->recvProcessNeighborZ[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-					para->getParD(i)->recvProcessNeighborZ[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-					para->getParH(i)->recvProcessNeighborZ[j].memsizeIndex = sizeof(unsigned int)*tempRecv;
-					para->getParD(i)->recvProcessNeighborZ[j].memsizeIndex = sizeof(unsigned int)*tempRecv;
-					para->getParH(i)->recvProcessNeighborZ[j].memsizeFs    = sizeof(doubflo)     *tempRecv;
-					para->getParD(i)->recvProcessNeighborZ[j].memsizeFs    = sizeof(doubflo)     *tempRecv;
-					////////////////////////////////////////////////////////////////////////////////////////
-					//malloc on host and device
-					para->cudaAllocProcessNeighborZ(i, j);
-					////////////////////////////////////////////////////////////////////////////////////////
-					//init index arrays
-					procNeighborsSendZ[j]->initIndex(para->getParH(i)->sendProcessNeighborZ[j].index, i);
-					procNeighborsRecvZ[j]->initIndex(para->getParH(i)->recvProcessNeighborZ[j].index, i);
-					////////////////////////////////////////////////////////////////////////////////////////
-					para->cudaCopyProcessNeighborZIndex(i, j);
-					////////////////////////////////////////////////////////////////////////////////////////
-				}
-			}
-		}
-	}//ende Z processor boundarys
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//3D domain decomposition convection diffusion
-	if (para->getDiffOn()==true){
-		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		// X
-		if ( (para->getNumprocs() > 1) && (procNeighborsSendADX.size() == procNeighborsRecvADX.size()) )
-		{
-			for (int j = 0; j < procNeighborsSendADX.size(); j++)
-			{
-				for (int i = 0; i <= level; i++) {
-					int tempSend = procNeighborsSendADX[j]->getSize(i);
-					int tempRecv = procNeighborsRecvADX[j]->getSize(i);
-					if (tempSend > 0)
-					{
-						////////////////////////////////////////////////////////////////////////////////////////
-						//send
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->sendProcessNeighborADX[j].rankNeighbor = neighborRankADX[j];
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->sendProcessNeighborADX[j].numberOfNodes = tempSend;
-						para->getParD(i)->sendProcessNeighborADX[j].numberOfNodes = tempSend;
-						para->getParH(i)->sendProcessNeighborADX[j].numberOfFs    = para->getD3Qxx() * tempSend;
-						para->getParD(i)->sendProcessNeighborADX[j].numberOfFs    = para->getD3Qxx() * tempSend;
-						para->getParH(i)->sendProcessNeighborADX[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-						para->getParD(i)->sendProcessNeighborADX[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-						para->getParH(i)->sendProcessNeighborADX[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-						para->getParD(i)->sendProcessNeighborADX[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-						////////////////////////////////////////////////////////////////////////////////////////
-						//recv
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->recvProcessNeighborADX[j].rankNeighbor = neighborRankADX[j];
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->recvProcessNeighborADX[j].numberOfNodes = tempRecv;
-						para->getParD(i)->recvProcessNeighborADX[j].numberOfNodes = tempRecv;
-						para->getParH(i)->recvProcessNeighborADX[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-						para->getParD(i)->recvProcessNeighborADX[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-						para->getParH(i)->recvProcessNeighborADX[j].memsizeIndex  = sizeof(unsigned int)*tempRecv;
-						para->getParD(i)->recvProcessNeighborADX[j].memsizeIndex  = sizeof(unsigned int)*tempRecv;
-						para->getParH(i)->recvProcessNeighborADX[j].memsizeFs     = sizeof(doubflo)     *tempRecv;
-						para->getParD(i)->recvProcessNeighborADX[j].memsizeFs     = sizeof(doubflo)     *tempRecv;
-						////////////////////////////////////////////////////////////////////////////////////////
-						//malloc on host and device
-						para->cudaAllocProcessNeighborADX(i, j);
-						////////////////////////////////////////////////////////////////////////////////////////
-						//init index arrays
-						procNeighborsSendADX[j]->initIndex(para->getParH(i)->sendProcessNeighborADX[j].index, i);
-						procNeighborsRecvADX[j]->initIndex(para->getParH(i)->recvProcessNeighborADX[j].index, i);
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->cudaCopyProcessNeighborADXIndex(i, j);
-						////////////////////////////////////////////////////////////////////////////////////////
-					}
-				}
-			}
-		}//ende X processor boundarys
-		//////////////////////////////////////////////////////////////////////////
-		// Y
-		if ( (para->getNumprocs() > 1) && (procNeighborsSendADY.size() == procNeighborsRecvADY.size()) )
-		{
-			for (int j = 0; j < procNeighborsSendADY.size(); j++)
-			{
-				for (int i = 0; i <= level; i++) {
-					int tempSend = procNeighborsSendADY[j]->getSize(i);
-					int tempRecv = procNeighborsRecvADY[j]->getSize(i);
-					if (tempSend > 0)
-					{
-						////////////////////////////////////////////////////////////////////////////////////////
-						//send
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->sendProcessNeighborADY[j].rankNeighbor = neighborRankADY[j];
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->sendProcessNeighborADY[j].numberOfNodes = tempSend;
-						para->getParD(i)->sendProcessNeighborADY[j].numberOfNodes = tempSend;
-						para->getParH(i)->sendProcessNeighborADY[j].numberOfFs    = para->getD3Qxx() * tempSend;
-						para->getParD(i)->sendProcessNeighborADY[j].numberOfFs    = para->getD3Qxx() * tempSend;
-						para->getParH(i)->sendProcessNeighborADY[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-						para->getParD(i)->sendProcessNeighborADY[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-						para->getParH(i)->sendProcessNeighborADY[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-						para->getParD(i)->sendProcessNeighborADY[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-						////////////////////////////////////////////////////////////////////////////////////////
-						//recv
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->recvProcessNeighborADY[j].rankNeighbor = neighborRankADY[j];
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->recvProcessNeighborADY[j].numberOfNodes = tempRecv;
-						para->getParD(i)->recvProcessNeighborADY[j].numberOfNodes = tempRecv;
-						para->getParH(i)->recvProcessNeighborADY[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-						para->getParD(i)->recvProcessNeighborADY[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-						para->getParH(i)->recvProcessNeighborADY[j].memsizeIndex  = sizeof(unsigned int)*tempRecv;
-						para->getParD(i)->recvProcessNeighborADY[j].memsizeIndex  = sizeof(unsigned int)*tempRecv;
-						para->getParH(i)->recvProcessNeighborADY[j].memsizeFs     = sizeof(doubflo)     *tempRecv;
-						para->getParD(i)->recvProcessNeighborADY[j].memsizeFs     = sizeof(doubflo)     *tempRecv;
-						////////////////////////////////////////////////////////////////////////////////////////
-						//malloc on host and device
-						para->cudaAllocProcessNeighborADY(i, j);
-						////////////////////////////////////////////////////////////////////////////////////////
-						//init index arrays
-						procNeighborsSendADY[j]->initIndex(para->getParH(i)->sendProcessNeighborADY[j].index, i);
-						procNeighborsRecvADY[j]->initIndex(para->getParH(i)->recvProcessNeighborADY[j].index, i);
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->cudaCopyProcessNeighborADYIndex(i, j);
-						////////////////////////////////////////////////////////////////////////////////////////
-					}
-				}
-			}
-		}//ende Y processor boundarys
-		//////////////////////////////////////////////////////////////////////////
-		// Z
-		if ( (para->getNumprocs() > 1) && (procNeighborsSendADZ.size() == procNeighborsRecvADZ.size()) )
-		{
-			for (int j = 0; j < procNeighborsSendADZ.size(); j++)
-			{
-				for (int i = 0; i <= level; i++) {
-					int tempSend = procNeighborsSendADZ[j]->getSize(i);
-					int tempRecv = procNeighborsRecvADZ[j]->getSize(i);
-					if (tempSend > 0)
-					{
-						////////////////////////////////////////////////////////////////////////////////////////
-						//send
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->sendProcessNeighborADZ[j].rankNeighbor = neighborRankADZ[j];
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->sendProcessNeighborADZ[j].numberOfNodes = tempSend;
-						para->getParD(i)->sendProcessNeighborADZ[j].numberOfNodes = tempSend;
-						para->getParH(i)->sendProcessNeighborADZ[j].numberOfFs    = para->getD3Qxx() * tempSend;
-						para->getParD(i)->sendProcessNeighborADZ[j].numberOfFs    = para->getD3Qxx() * tempSend;
-						para->getParH(i)->sendProcessNeighborADZ[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-						para->getParD(i)->sendProcessNeighborADZ[j].memsizeIndex  = sizeof(unsigned int)*tempSend;
-						para->getParH(i)->sendProcessNeighborADZ[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-						para->getParD(i)->sendProcessNeighborADZ[j].memsizeFs     = sizeof(doubflo)     *tempSend;
-						////////////////////////////////////////////////////////////////////////////////////////
-						//recv
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->recvProcessNeighborADZ[j].rankNeighbor = neighborRankADZ[j];
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->getParH(i)->recvProcessNeighborADZ[j].numberOfNodes = tempRecv;
-						para->getParD(i)->recvProcessNeighborADZ[j].numberOfNodes = tempRecv;
-						para->getParH(i)->recvProcessNeighborADZ[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-						para->getParD(i)->recvProcessNeighborADZ[j].numberOfFs    = para->getD3Qxx() * tempRecv;
-						para->getParH(i)->recvProcessNeighborADZ[j].memsizeIndex  = sizeof(unsigned int)*tempRecv;
-						para->getParD(i)->recvProcessNeighborADZ[j].memsizeIndex  = sizeof(unsigned int)*tempRecv;
-						para->getParH(i)->recvProcessNeighborADZ[j].memsizeFs     = sizeof(doubflo)     *tempRecv;
-						para->getParD(i)->recvProcessNeighborADZ[j].memsizeFs     = sizeof(doubflo)     *tempRecv;
-						////////////////////////////////////////////////////////////////////////////////////////
-						//malloc on host and device
-						para->cudaAllocProcessNeighborADZ(i, j);
-						////////////////////////////////////////////////////////////////////////////////////////
-						//init index arrays
-						procNeighborsSendADZ[j]->initIndex(para->getParH(i)->sendProcessNeighborADZ[j].index, i);
-						procNeighborsRecvADZ[j]->initIndex(para->getParH(i)->recvProcessNeighborADZ[j].index, i);
-						////////////////////////////////////////////////////////////////////////////////////////
-						para->cudaCopyProcessNeighborADZIndex(i, j);
-						////////////////////////////////////////////////////////////////////////////////////////
-					}
-				}
-			}
-		}//ende Z processor boundarys
-		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	}
-
-
-
-
-	//---------------------------------------------------------------------//BIS HIER CODE FUER MARTIN////-------------------------------------------------------------------//
-	
-
-	for (int i = 0; i < t; i++) {
-		delete BC_Values[i];
-	}
-
-	delete BC_Values;
-	delete obj_geomV;
-
-	cout << "-----Ende config Arrays BoundaryValues-----" <<endl;
-}
-
-void Interface::allocArrays_BoundaryQs(Parameter* para) {
-	cout << "-----Config Arrays BoundaryQs------" <<endl;
-	//cout << "1: MyID: " << para->getMyID() << endl;
-	int t = 6;
-
-	//cout << "2: MyID: " << para->getMyID() << endl;
-	BoundaryQs **BC_Qs = new BoundaryQs*[t];
-	this->sortSystem(BC_Qs, para, t);
-
-	
-	//cout << "3: MyID: " << para->getMyID() << endl;
-	BoundaryQs *obj_geomQ = new BoundaryQs(para->getgeomBoundaryBcQs(), para, "geo", false);
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//Normals Geo
-	BoundaryQs *obj_geomNormalX = new BoundaryQs(para->getgeomBoundaryNormalX(), para, "geoNormal", false);
-	BoundaryQs *obj_geomNormalY = new BoundaryQs(para->getgeomBoundaryNormalY(), para, "geoNormal", false);
-	BoundaryQs *obj_geomNormalZ = new BoundaryQs(para->getgeomBoundaryNormalZ(), para, "geoNormal", false);
-	//////////////////////////////////////////////////////////////////////////
-	//Normals Inflow
-	BoundaryQs *obj_inflowNormalX = new BoundaryQs(para->getInflowBoundaryNormalX(), para, "inflowNormal", false);
-	BoundaryQs *obj_inflowNormalY = new BoundaryQs(para->getInflowBoundaryNormalY(), para, "inflowNormal", false);
-	BoundaryQs *obj_inflowNormalZ = new BoundaryQs(para->getInflowBoundaryNormalZ(), para, "inflowNormal", false);
-	//////////////////////////////////////////////////////////////////////////
-	//Normals Outflow
-	BoundaryQs *obj_outflowNormalX = new BoundaryQs(para->getOutflowBoundaryNormalX(), para, "outflowNormal", false);
-	BoundaryQs *obj_outflowNormalY = new BoundaryQs(para->getOutflowBoundaryNormalY(), para, "outflowNormal", false);
-	BoundaryQs *obj_outflowNormalZ = new BoundaryQs(para->getOutflowBoundaryNormalZ(), para, "outflowNormal", false);
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	int level = BC_Qs[0]->getLevel();
-	
-	//cout << "4: MyID: " << para->getMyID() << endl;
-
-	//-----------------------------------------Vektoren Deklarationen-----------
-	vector<vector<vector<doubflo> > > noslipQs;
-	vector<vector<unsigned int> > noslipIndex;
-	vector<vector<vector<doubflo> > > slipQs;
-	vector<vector<unsigned int> > slipIndex;
-	vector<vector<vector<doubflo> > > pressureQs;
-	vector<vector<unsigned int> > pressureIndex;
-	vector<vector<vector<doubflo> > > velocityQs;
-	vector<vector<unsigned int> > velocityIndex;
-	vector<vector<vector<doubflo> > > outflowQs;
-	vector<vector<unsigned int> > outflowIndex;
-	//Geom-Daten werden mit dem Methode initArray() auf die Arrays kopiert. kein GetSet!
-
-	//cout << "5: MyID: " << para->getMyID() << endl;
-	noslipQs.resize(level+1);
-	slipQs.resize(level+1);
-	pressureQs.resize(level+1);
-	velocityQs.resize(level+1);
-	outflowQs.resize(level+1);
-
-	noslipIndex.resize(level+1);
-	slipIndex.resize(level+1);
-	pressureIndex.resize(level+1);
-	velocityIndex.resize(level+1);
-	outflowIndex.resize(level+1);
-
-	//cout << "6: MyID: " << para->getMyID() << endl;
-
-	for(int i=0; i<=level;i++) {
-		noslipQs[i].resize(27);
-		slipQs[i].resize(27);
-		pressureQs[i].resize(27);
-		velocityQs[i].resize(27);
-		outflowQs[i].resize(27);
-	}
-
-	//cout << "7: MyID: " << para->getMyID() << endl;
-
-	for (int i = 0; i < t; i++){
-		if (this->way[i] == "noSlip") { noslipQs = BC_Qs[i]->setgetBoundarys(noslipQs); noslipIndex = BC_Qs[i]->setgetIndex(noslipIndex); }
-		else if (this->way[i] == "velocity") { velocityQs = BC_Qs[i]->setgetBoundarys(velocityQs); velocityIndex = BC_Qs[i]->setgetIndex(velocityIndex); }
-		else if (this->way[i] == "pressure") { pressureQs = BC_Qs[i]->setgetBoundarys(pressureQs); pressureIndex = BC_Qs[i]->setgetIndex(pressureIndex); }
-		else if (this->way[i] == "slip") { slipQs = BC_Qs[i]->setgetBoundarys(slipQs); slipIndex = BC_Qs[i]->setgetIndex(slipIndex); }
-		else if (this->way[i] == "outflow") { outflowQs = BC_Qs[i]->setgetBoundarys(outflowQs); outflowIndex = BC_Qs[i]->setgetIndex(outflowIndex); }
-	}
-
-
-
-	//TEST Soeren---------------------------------------------------------------------------------------------------------------------------------------------------
-	//if (TEST == true) {
-	//	for (int i = 0; i <= level; i++) {
-	//		int temp = (int)velocityQs[i][0].size();
-	//		cout << "Groesse VelocityQs lvl " << i << " : " << temp << endl;
-	//	}
-	//	for (int i = 0; i <= level; i++) {
-	//		int temp = (int)pressureQs[i][0].size();
-	//		cout << "Groesse PressureQs lvl " << i << " : " << temp << endl;
-	//	}
-	//	for (int i = 0; i <= level; i++) {
-	//		int temp = (int)slipQs[i][0].size();
-	//		cout << "Groesse slipQs lvl " << i << " : " << temp << endl;
-	//	}
-	//	for (int i = 0; i <= level; i++) {
-	//		int temp = (int)noslipQs[i][0].size();
-	//		cout << "Groesse noslipQs lvl " << i << " : " << temp << endl;
-	//	}
-	//	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		//int ausgabe = 1;
-	//	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	//	cout << endl;
-	//	cout << "TEST PRESSURE Qs: " << endl;
-	//	for (int j = 0; j <= level; j++) {
-	//		if (pressureQs[j][0].size() > 0){
-	//			for (int i = 0; i < ausgabe; i++) {
-	//				cout << "PressureQs level " << j << ", eintrag " << i << " , index " << pressureIndex[j][i] << " :" << endl;
-	//				for (int k = 0; k < 27; k++) {
-	//					cout << pressureQs[j][k][i] << "|";
-	//				}
-	//				cout << endl;
-	//				cout << endl;
-	//			}
-	//			for (unsigned int i = pressureQs[j][0].size() - ausgabe; i < pressureQs[j][0].size(); i++) {
-	//				cout << "PressureQs level " << j << ", eintrag " << i << " , index " << pressureIndex[j][i] << " :" << endl;
-	//				for (int k = 0; k < 27; k++) {
-	//					cout << pressureQs[j][k][i] << "|";
-	//				}
-	//				cout << endl;
-	//				cout << endl;
-	//			}
-	//		}
-	//	}
-	//	cout << endl;
-	//	cout << "TEST VELOCITY Qs: " << endl;
-	//	for (int j = 0; j <= level; j++) {
-	//		if (velocityQs[j][0].size() > 0){
-	//			for (int i = 0; i < ausgabe; i++) {
-	//				cout << "velocityQs level " << j << ", eintrag " << i << " , index " << velocityIndex[j][i] << " :" << endl;
-	//				for (int k = 0; k < 27; k++) {
-	//					cout << velocityQs[j][k][i] << "|";
-	//				}
-	//				cout << endl;
-	//				cout << endl;
-	//			}
-	//			for (unsigned int i = velocityQs[j][0].size() - ausgabe; i < velocityQs[j][0].size(); i++) {
-	//				cout << "velocityQs level " << j << ", eintrag " << i << " , index " << velocityIndex[j][i] << " :" << endl;
-	//				for (int k = 0; k < 27; k++) {
-	//					cout << velocityQs[j][k][i] << "|";
-	//				}
-	//				cout << endl;
-	//				cout << endl;
-	//			}
-	//		}
-	//	}
-	//	cout << endl;
-		//cout << "TEST NOSLIP Qs: " << endl;
-		//for (int j = 0; j <= level; j++) {
-		//	if (noslipQs[j][0].size() > 0){
-		//		for (int i = 0; i < ausgabe; i++) {
-		//			cout << "noslipQs level " << j << ", eintrag " << i << " , index " << noslipIndex[j][i] << " :" << endl;
-		//			for (int k = 0; k < 27; k++) {
-		//				cout << noslipQs[j][k][i] << "|";
-		//			}
-		//			cout << endl;
-		//			cout << endl;
-		//		}
-		//		for (unsigned int i = noslipQs[j][0].size() - ausgabe; i < noslipQs[j][0].size(); i++) {
-		//			cout << "noslipQs level " << j << ", eintrag " << i << " , index " << noslipIndex[j][i] << " :" << endl;
-		//			for (int k = 0; k < 27; k++) {
-		//				cout << noslipQs[j][k][i] << "|";
-		//			}
-		//			cout << endl;
-		//			cout << endl;
-		//		}
-		//	}
-		//}
-	//	cout << endl;
-	//	cout << "TEST SLIP Qs: " << endl;
-	//	for (int j = 0; j <= level; j++) {
-	//		if (slipQs[j][0].size() > 0){
-	//			for (int i = 0; i < ausgabe; i++) {
-	//				cout << "slipQs level " << j << ", eintrag " << i << " , index " << slipIndex[j][i] << " :" << endl;
-	//				for (int k = 0; k < 27; k++) {
-	//					cout << slipQs[j][k][i] << "|";
-	//				}
-	//				cout << endl;
-	//				cout << endl;
-	//			}
-	//			for (unsigned int i = slipQs[j][0].size() - ausgabe; i < slipQs[j][0].size(); i++) {
-	//				cout << "slipQs level " << j << ", eintrag " << i << " , index " << slipIndex[j][i] << " :" << endl;
-	//				for (int k = 0; k < 27; k++) {
-	//					cout << slipQs[j][k][i] << "|";
-	//				}
-	//				cout << endl;
-	//				cout << endl;
-	//			}
-	//		}
-	//	}
-	//}
-	//ENDE TEST Soeren---------------------------------------------------------------------------------------------------------------------------------------------------
-	
-	//---------------------------------------------------------------------//AB HIER CODE FUER MARTIN////-------------------------------------------------------------------//
-	//---------------------------------------------------------------------//
-	//cout << "10: MyID: " << para->getMyID() << endl;
-
-	for (int i = 0; i <= level; i++) {
-		int temp1 = (int)pressureIndex[i].size();
-		if (temp1 > 0)
-		{
-			cout << "Groesse Pressure:  " << i << " : " << temp1 << endl;
-			//cout << "Groesse Pressure:  " << i << " : " << temp1 << "MyID: " << para->getMyID() << endl;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//preprocessing
-			doubflo* QQ = para->getParH(i)->QPress.q27[0];
-			unsigned int sizeQ = para->getParH(i)->QPress.kQ;
-			QforBoundaryConditions Q;
-			Q.q27[dirE] = &QQ[dirE   *sizeQ];
-			Q.q27[dirW] = &QQ[dirW   *sizeQ];
-			Q.q27[dirN] = &QQ[dirN   *sizeQ];
-			Q.q27[dirS] = &QQ[dirS   *sizeQ];
-			Q.q27[dirT] = &QQ[dirT   *sizeQ];
-			Q.q27[dirB] = &QQ[dirB   *sizeQ];
-			Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-			Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-			Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-			Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-			Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-			Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-			Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-			Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-			Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-			Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-			Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-			Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-			Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-			Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-			Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-			Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-			Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-			Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-			Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-			Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-			Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
-			//////////////////////////////////////////////////////////////////
-			int d = 0;
-			int j = 0;
-			int n = 0;
-			for (vector<vector<vector<doubflo> > >::iterator it = pressureQs.begin(); it != pressureQs.end(); it++) {
-				if (i == d) {
-					for (vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-						for (vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-							Q.q27[j][n] = *it3;
-							n++;
-						}
-						j++; // zaehlt die Spalte mit		
-						n = 0;
-					}
-				}
-				d++; // zaehlt das Level mit
-				j = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			d = 0;
-			n = 0;
-			for (vector<vector<unsigned int> >::iterator it = pressureIndex.begin(); it != pressureIndex.end(); it++) {
-				if (i == d) {
-					for (vector<unsigned int>::iterator it2 = it->begin(); it2 != it->end(); it2++) {
-						para->getParH(i)->QPress.k[n] = *it2;
-						n++;
-					}
-				}
-				d++;
-				n = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			// advection - diffusion stuff
-			//cout << "vor advec diff" << endl;
-			if (para->getDiffOn()==true){
-				//////////////////////////////////////////////////////////////////////////
-				//cout << "vor setzen von kTemp" << endl;
-				para->getParH(i)->TempPress.kTemp = temp1;
-				para->getParD(i)->TempPress.kTemp = temp1;
-				cout << "Groesse TempPress.kTemp = " << para->getParH(i)->TempPress.kTemp << endl;
-				//////////////////////////////////////////////////////////////////////////
-				para->cudaAllocTempPressBC(i);
-				//cout << "nach alloc" << endl;
-				//////////////////////////////////////////////////////////////////////////
-				for (int m = 0; m < temp1; m++)
-				{
-					para->getParH(i)->TempPress.temp[m] = para->getTemperatureInit();
-					para->getParH(i)->TempPress.velo[m] = (doubflo)0.0;
-					para->getParH(i)->TempPress.k[m]    = para->getParH(i)->QPress.k[m];
-				}
-				//////////////////////////////////////////////////////////////////////////
-				//cout << "vor copy" << endl;
-				para->cudaCopyTempPressBCHD(i);
-				//cout << "nach copy" << endl;
-				//////////////////////////////////////////////////////////////////////////
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaCopyPress(i);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		}//ende if
-	}//ende oberste for schleife
-
-
-
-	//--------------------------------------------------------------------------//
-	for (int i = 0; i <= level; i++) {
-		int temp3 = (int)velocityIndex[i].size();
-		if (temp3 > 0)
-		{
-			cout << "Groesse velocity level " << i << " : " << temp3 << endl;
-			//cout << "Groesse velocity level:  " << i << " : " << temp3 << "MyID: " << para->getMyID() << endl;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//preprocessing
-			doubflo* QQ = para->getParH(i)->Qinflow.q27[0];
-			unsigned int sizeQ = para->getParH(i)->Qinflow.kQ;
-			QforBoundaryConditions Q;
-			Q.q27[dirE] = &QQ[dirE   *sizeQ];
-			Q.q27[dirW] = &QQ[dirW   *sizeQ];
-			Q.q27[dirN] = &QQ[dirN   *sizeQ];
-			Q.q27[dirS] = &QQ[dirS   *sizeQ];
-			Q.q27[dirT] = &QQ[dirT   *sizeQ];
-			Q.q27[dirB] = &QQ[dirB   *sizeQ];
-			Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-			Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-			Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-			Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-			Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-			Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-			Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-			Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-			Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-			Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-			Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-			Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-			Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-			Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-			Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-			Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-			Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-			Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-			Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-			Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-			Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
-			//////////////////////////////////////////////////////////////////
-			int d = 0;
-			int j = 0;
-			int n = 0;
-			for (vector<vector<vector<doubflo> > >::iterator it = velocityQs.begin(); it != velocityQs.end(); it++) {
-				if (i == d) {
-					for (vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-						for (vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-							Q.q27[j][n] = *it3;
-
-							n++;
-						}
-						j++; // zaehlt die Spalte mit		
-						n = 0;
-					}
-				}
-				d++; // zaehlt das Level mit
-				j = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			d = 0;
-			n = 0;
-			for (vector<vector<unsigned int> >::iterator it = velocityIndex.begin(); it != velocityIndex.end(); it++) {
-				if (i == d) {
-					for (vector<unsigned int>::iterator it2 = it->begin(); it2 != it->end(); it2++) {
-						para->getParH(i)->Qinflow.k[n] = *it2;
-						n++;
-					}
-				}
-				d++;
-				n = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			// advection - diffusion stuff
-			if (para->getDiffOn()==true){
-				//////////////////////////////////////////////////////////////////////////
-				para->getParH(i)->TempVel.kTemp = temp3;
-				para->getParD(i)->TempVel.kTemp = temp3;
-				cout << "Groesse TempVel.kTemp = " << para->getParH(i)->TempPress.kTemp << endl;
-				cout << "getTemperatureInit = " << para->getTemperatureInit() << endl;
-				cout << "getTemperatureBC = " << para->getTemperatureBC() << endl;
-				//////////////////////////////////////////////////////////////////////////
-				para->cudaAllocTempVeloBC(i);
-				//cout << "nach alloc " << endl;
-				//////////////////////////////////////////////////////////////////////////
-				for (int m = 0; m < temp3; m++)
-				{
-					para->getParH(i)->TempVel.temp[m]      = para->getTemperatureInit();
-					para->getParH(i)->TempVel.tempPulse[m] = para->getTemperatureBC();
-					para->getParH(i)->TempVel.velo[m]      = para->getVelocity();
-					para->getParH(i)->TempVel.k[m]         = para->getParH(i)->Qinflow.k[m];
-				}
-				//////////////////////////////////////////////////////////////////////////
-				//cout << "vor copy " << endl;
-				para->cudaCopyTempVeloBCHD(i);
-				//cout << "nach copy " << endl;
-				//////////////////////////////////////////////////////////////////////////
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaCopyVeloBC(i);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			if (para->getIsInflowNormal()){
-				int temp = obj_inflowNormalX->getSize(i);
-				if (temp > 0)
-				{
-					cout << "Groesse der Daten InflowBoundaryNormalsX, Level " << i << " : " << temp << endl;
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-					para->getParH(i)->QInflowNormalX.kQ = temp;
-					para->getParH(i)->QInflowNormalY.kQ = temp;
-					para->getParH(i)->QInflowNormalZ.kQ = temp;
-					para->getParD(i)->QInflowNormalX.kQ = para->getParH(i)->QInflowNormalX.kQ;
-					para->getParD(i)->QInflowNormalY.kQ = para->getParH(i)->QInflowNormalY.kQ;
-					para->getParD(i)->QInflowNormalZ.kQ = para->getParH(i)->QInflowNormalZ.kQ;
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-					para->cudaAllocInflowNormals(i);
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//Indexarray
-					obj_inflowNormalX->initIndex(para->getParH(i)->QInflowNormalX.k, i);
-					obj_inflowNormalY->initIndex(para->getParH(i)->QInflowNormalY.k, i);
-					obj_inflowNormalZ->initIndex(para->getParH(i)->QInflowNormalZ.k, i);
-					//////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//preprocessing X
-					doubflo* QQX = para->getParH(i)->QInflowNormalX.q27[0];
-					unsigned int sizeQX = para->getParH(i)->QInflowNormalX.kQ;
-					QforBoundaryConditions QX;
-					//////////////////////////////////////////////////////////////////
-					for (int j = 0; j<27; j++) {
-						QX.q27[j] = &QQX[j * sizeQX];
-						obj_inflowNormalX->initArray(QX.q27[j], i, j);
-					}//ende der for schleife
-					//////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//preprocessing Y
-					doubflo* QQY = para->getParH(i)->QInflowNormalY.q27[0];
-					unsigned int sizeQY = para->getParH(i)->QInflowNormalY.kQ;
-					QforBoundaryConditions QY;
-					//////////////////////////////////////////////////////////////////
-					for (int j = 0; j<27; j++) {
-						QY.q27[j] = &QQY[j * sizeQY];
-						obj_inflowNormalY->initArray(QY.q27[j], i, j);
-					}//ende der for schleife
-					//////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//preprocessing Z
-					doubflo* QQZ = para->getParH(i)->QInflowNormalZ.q27[0];
-					unsigned int sizeQZ = para->getParH(i)->QInflowNormalZ.kQ;
-					QforBoundaryConditions QZ;
-					//////////////////////////////////////////////////////////////////
-					for (int j = 0; j<27; j++) {
-						QZ.q27[j] = &QQZ[j * sizeQZ];
-						obj_inflowNormalZ->initArray(QZ.q27[j], i, j);
-					}//ende der for schleife
-					//////////////////////////////////////////////////////////////////
-
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-					para->cudaCopyInflowNormals(i);
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				}
-			}
-		}
-	}//ende oberste for schleife
-
-
-
-
-
-	//--------------------------------------------------------------------------//
-	for (int i = 0; i <= level; i++) {
-		int temp = (int)outflowIndex[i].size();
-		if (temp > 0)
-		{
-			cout << "Groesse Outflow:  " << i << " : " << temp << endl;
-			//cout << "Groesse Pressure:  " << i << " : " << temp1 << "MyID: " << para->getMyID() << endl;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//preprocessing
-			doubflo* QQ = para->getParH(i)->Qoutflow.q27[0];
-			unsigned int sizeQ = para->getParH(i)->Qoutflow.kQ;
-			QforBoundaryConditions Q;
-			Q.q27[dirE] = &QQ[dirE   *sizeQ];
-			Q.q27[dirW] = &QQ[dirW   *sizeQ];
-			Q.q27[dirN] = &QQ[dirN   *sizeQ];
-			Q.q27[dirS] = &QQ[dirS   *sizeQ];
-			Q.q27[dirT] = &QQ[dirT   *sizeQ];
-			Q.q27[dirB] = &QQ[dirB   *sizeQ];
-			Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-			Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-			Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-			Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-			Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-			Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-			Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-			Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-			Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-			Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-			Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-			Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-			Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-			Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-			Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-			Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-			Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-			Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-			Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-			Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-			Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
-			//////////////////////////////////////////////////////////////////
-			int d = 0;
-			int j = 0;
-			int n = 0;
-			for (vector<vector<vector<doubflo> > >::iterator it = outflowQs.begin(); it != outflowQs.end(); it++) {
-				if (i == d) {
-					for (vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-						for (vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-							Q.q27[j][n] = *it3;
-							n++;
-						}
-						j++; // zaehlt die Spalte mit		
-						n = 0;
-					}
-				}
-				d++; // zaehlt das Level mit
-				j = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			d = 0;
-			n = 0;
-			for (vector<vector<unsigned int> >::iterator it = outflowIndex.begin(); it != outflowIndex.end(); it++) {
-				if (i == d) {
-					for (vector<unsigned int>::iterator it2 = it->begin(); it2 != it->end(); it2++) {
-						para->getParH(i)->Qoutflow.k[n] = *it2;
-						n++;
-					}
-				}
-				d++;
-				n = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaCopyOutflowBC(i);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			if (para->getIsOutflowNormal()){
-				int temp = obj_outflowNormalX->getSize(i);
-				if (temp > 0)
-				{
-					cout << "Groesse der Daten OutflowBoundaryNormalsX, Level " << i << " : " << temp << endl;
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-					para->getParH(i)->QOutflowNormalX.kQ = temp;
-					para->getParH(i)->QOutflowNormalY.kQ = temp;
-					para->getParH(i)->QOutflowNormalZ.kQ = temp;
-					para->getParD(i)->QOutflowNormalX.kQ = para->getParH(i)->QOutflowNormalX.kQ;
-					para->getParD(i)->QOutflowNormalY.kQ = para->getParH(i)->QOutflowNormalY.kQ;
-					para->getParD(i)->QOutflowNormalZ.kQ = para->getParH(i)->QOutflowNormalZ.kQ;
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-					para->cudaAllocOutflowNormals(i);
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//Indexarray
-					obj_outflowNormalX->initIndex(para->getParH(i)->QOutflowNormalX.k, i);
-					obj_outflowNormalY->initIndex(para->getParH(i)->QOutflowNormalY.k, i);
-					obj_outflowNormalZ->initIndex(para->getParH(i)->QOutflowNormalZ.k, i);
-					//////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//preprocessing X
-					doubflo* QQX = para->getParH(i)->QOutflowNormalX.q27[0];
-					unsigned int sizeQX = para->getParH(i)->QOutflowNormalX.kQ;
-					QforBoundaryConditions QX;
-					//////////////////////////////////////////////////////////////////
-					for (int j = 0; j<27; j++) {
-						QX.q27[j] = &QQX[j * sizeQX];
-						obj_outflowNormalX->initArray(QX.q27[j], i, j);
-					}//ende der for schleife
-					//////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//preprocessing Y
-					doubflo* QQY = para->getParH(i)->QOutflowNormalY.q27[0];
-					unsigned int sizeQY = para->getParH(i)->QOutflowNormalY.kQ;
-					QforBoundaryConditions QY;
-					//////////////////////////////////////////////////////////////////
-					for (int j = 0; j<27; j++) {
-						QY.q27[j] = &QQY[j * sizeQY];
-						obj_outflowNormalY->initArray(QY.q27[j], i, j);
-					}//ende der for schleife
-					//////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//preprocessing Z
-					doubflo* QQZ = para->getParH(i)->QOutflowNormalZ.q27[0];
-					unsigned int sizeQZ = para->getParH(i)->QOutflowNormalZ.kQ;
-					QforBoundaryConditions QZ;
-					//////////////////////////////////////////////////////////////////
-					for (int j = 0; j<27; j++) {
-						QZ.q27[j] = &QQZ[j * sizeQZ];
-						obj_outflowNormalZ->initArray(QZ.q27[j], i, j);
-					}//ende der for schleife
-					//////////////////////////////////////////////////////////////////
-
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-					para->cudaCopyOutflowNormals(i);
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				}
-			}
-		}//ende if
-	}//ende oberste for schleife
-
-
-
-
-
-	//--------------------------------------------------------------------------//
-	for (int i = 0; i <= level; i++) {
-		int temp2 = (int)noslipQs[i][0].size();
-		para->getParH(i)->QWall.kQ = temp2;
-		para->getParD(i)->QWall.kQ = para->getParH(i)->QWall.kQ;
-		para->getParH(i)->kQ = para->getParH(i)->QWall.kQ;
-		para->getParD(i)->kQ = para->getParH(i)->QWall.kQ;
-		if (temp2 > 0)
-		{
-			cout << "Groesse NoSlip: " << i << " : " << temp2 << endl;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//para->getParH(i)->QWall.kQ = temp2;
-			//para->getParD(i)->QWall.kQ = para->getParH(i)->QWall.kQ;
-			//para->getParH(i)->kQ = para->getParH(i)->QWall.kQ;
-			//para->getParD(i)->kQ = para->getParH(i)->QWall.kQ;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaAllocWallBC(i);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//preprocessing
-			doubflo* QQ = para->getParH(i)->QWall.q27[0];
-			unsigned int sizeQ = para->getParH(i)->QWall.kQ;
-			QforBoundaryConditions Q;
-			Q.q27[dirE] = &QQ[dirE   *sizeQ];
-			Q.q27[dirW] = &QQ[dirW   *sizeQ];
-			Q.q27[dirN] = &QQ[dirN   *sizeQ];
-			Q.q27[dirS] = &QQ[dirS   *sizeQ];
-			Q.q27[dirT] = &QQ[dirT   *sizeQ];
-			Q.q27[dirB] = &QQ[dirB   *sizeQ];
-			Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-			Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-			Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-			Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-			Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-			Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-			Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-			Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-			Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-			Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-			Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-			Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-			Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-			Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-			Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-			Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-			Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-			Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-			Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-			Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-			Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
-			//////////////////////////////////////////////////////////////////
-			int d = 0;
-			int j = 0;
-			int n = 0;
-			for (vector<vector<vector<doubflo> > >::iterator it = noslipQs.begin(); it != noslipQs.end(); it++) {
-				if (i == d) {
-					for (vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-						for (vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-							Q.q27[j][n] = *it3;
-							n++;
-						}
-						j++; // zaehlt die Spalte mit		
-						n = 0;
-					}
-				}
-				d++; // zaehlt das Level mit
-				j = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			d = 0;
-			n = 0;
-			for (vector<vector<unsigned int> >::iterator it = noslipIndex.begin(); it != noslipIndex.end(); it++) {
-				if (i == d) {
-					for (vector<unsigned int>::iterator it2 = it->begin(); it2 != it->end(); it2++) {
-						para->getParH(i)->QWall.k[n] = *it2;
-						n++;
-					}
-				}
-				d++;
-				n = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaCopyWallBC(i);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		}
-	}//ende oberste for schleife
-
-	//--------------------------------------------------------------------------//
-	for (int i = 0; i <= level; i++) {
-		int temp2 = (int)slipQs[i][0].size();
-		if (temp2 > 0)
-		{
-			cout << "Groesse Slip: " << i << " : " << temp2 << endl;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->getParH(i)->QSlip.kQ = temp2;
-			para->getParD(i)->QSlip.kQ = para->getParH(i)->QSlip.kQ;
-			para->getParH(i)->kSlipQ = para->getParH(i)->QSlip.kQ;
-			para->getParD(i)->kSlipQ = para->getParH(i)->QSlip.kQ;
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaAllocSlipBC(i);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//preprocessing
-			doubflo* QQ = para->getParH(i)->QSlip.q27[0];
-			unsigned int sizeQ = para->getParH(i)->QSlip.kQ;
-			QforBoundaryConditions Q;
-			Q.q27[dirE] = &QQ[dirE   *sizeQ];
-			Q.q27[dirW] = &QQ[dirW   *sizeQ];
-			Q.q27[dirN] = &QQ[dirN   *sizeQ];
-			Q.q27[dirS] = &QQ[dirS   *sizeQ];
-			Q.q27[dirT] = &QQ[dirT   *sizeQ];
-			Q.q27[dirB] = &QQ[dirB   *sizeQ];
-			Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-			Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-			Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-			Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-			Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-			Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-			Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-			Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-			Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-			Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-			Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-			Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-			Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-			Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-			Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-			Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-			Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-			Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-			Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-			Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-			Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
-			//////////////////////////////////////////////////////////////////
-			int d = 0;
-			int j = 0;
-			int n = 0;
-			for (vector<vector<vector<doubflo> > >::iterator it = slipQs.begin(); it != slipQs.end(); it++) {
-				if (i == d) {
-					for (vector<vector<doubflo> >::iterator it2 = it->begin(); it2 != it->end(); it2++){
-						for (vector<doubflo>::iterator it3 = it2->begin(); it3 != it2->end(); it3++){
-							Q.q27[j][n] = *it3;
-							n++;
-						}
-						j++; // zaehlt die Spalte mit		
-						n = 0;
-					}
-				}
-				d++; // zaehlt das Level mit
-				j = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			d = 0;
-			n = 0;
-			for (vector<vector<unsigned int> >::iterator it = slipIndex.begin(); it != slipIndex.end(); it++) {
-				if (i == d) {
-					for (vector<unsigned int>::iterator it2 = it->begin(); it2 != it->end(); it2++) {
-						para->getParH(i)->QSlip.k[n] = *it2;
-						n++;
-					}
-				}
-				d++;
-				n = 0;
-			}
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			para->cudaCopySlipBC(i);
-			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		}
-	}//ende oberste for schleife
-
-
-
-	//--------------------------------------------------------------------------//
-	if (para->getIsGeo()){
-		for (int i = 0; i <= level; i++) {
-			int temp4 = obj_geomQ->getSize(i);
-			para->getParH(i)->QGeom.kQ = temp4;
-			para->getParD(i)->QGeom.kQ = para->getParH(i)->QGeom.kQ;
-			if (temp4 > 0)
-			{
-				cout << "Groesse der Daten GeomBoundaryQs, Level " << i << " : " << temp4 << endl;
-				cout << "Groesse der Daten GeomBoundaryQs, Level:  " << i << " : " << temp4 << "MyID: " << para->getMyID() << endl;
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				//para->getParH(i)->QGeom.kQ = temp4;
-				//para->getParD(i)->QGeom.kQ = para->getParH(i)->QGeom.kQ;
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				para->cudaAllocGeomBC(i);
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-				//////////////////////////////////////////////////////////////////////////
-				//Indexarray
-				obj_geomQ->initIndex(para->getParH(i)->QGeom.k, i);
-				//////////////////////////////////////////////////////////////////////////
-				//preprocessing
-				doubflo* QQ = para->getParH(i)->QGeom.q27[0];
-				unsigned int sizeQ = para->getParH(i)->QGeom.kQ;
-				QforBoundaryConditions Q;
-				Q.q27[dirE] = &QQ[dirE   *sizeQ];
-				Q.q27[dirW] = &QQ[dirW   *sizeQ];
-				Q.q27[dirN] = &QQ[dirN   *sizeQ];
-				Q.q27[dirS] = &QQ[dirS   *sizeQ];
-				Q.q27[dirT] = &QQ[dirT   *sizeQ];
-				Q.q27[dirB] = &QQ[dirB   *sizeQ];
-				Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-				Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-				Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-				Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-				Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-				Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-				Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-				Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-				Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-				Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-				Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-				Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-				Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-				Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-				Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-				Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-				Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-				Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-				Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-				Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-				Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
-				//////////////////////////////////////////////////////////////////
-				for (int j = 0; j<27; j++) {
-					obj_geomQ->initArray(Q.q27[j], i, j);
-				}//ende der for schleife
-				//////////////////////////////////////////////////////////////////
-				for(int test = 0; test < temp4; test++)
-				{				
-					Q.q27[dirZERO][test] = 0.0f;
-				}
-				//for(int test = 0; test < 3; test++)
-				//{
-				//	for (int tmp = 0; tmp < 27; tmp++)
-				//	{
-				//		cout <<"Kuhs: " << Q.q27[tmp][test]  << endl;				
-				//	}
-				//}
-
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				// advection - diffusion stuff
-				if (para->getDiffOn()==true){
-					//////////////////////////////////////////////////////////////////////////
-					para->getParH(i)->Temp.kTemp = temp4;
-					para->getParD(i)->Temp.kTemp = temp4;
-					cout << "Groesse Temp.kTemp = " << para->getParH(i)->Temp.kTemp << endl;
-					//////////////////////////////////////////////////////////////////////////
-					para->cudaAllocTempNoSlipBC(i);
-					//////////////////////////////////////////////////////////////////////////
-					for (int m = 0; m < temp4; m++)
-					{
-						para->getParH(i)->Temp.temp[m] = para->getTemperatureInit();
-						para->getParH(i)->Temp.k[m]    = para->getParH(i)->QGeom.k[m];
-					}
-					//////////////////////////////////////////////////////////////////////////
-					para->cudaCopyTempNoSlipBCHD(i);
-					//////////////////////////////////////////////////////////////////////////
-				}
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				para->cudaCopyGeomBC(i);
-				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			}
-			if (para->getIsGeoNormal()){
-				int temp = obj_geomNormalX->getSize(i);
-				if (temp > 0)
-				{
-					cout << "Groesse der Daten GeomBoundaryNormalsX, Level " << i << " : " << temp << endl;
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-					para->getParH(i)->QGeomNormalX.kQ = temp;
-					para->getParH(i)->QGeomNormalY.kQ = temp;
-					para->getParH(i)->QGeomNormalZ.kQ = temp;
-					para->getParD(i)->QGeomNormalX.kQ = para->getParH(i)->QGeomNormalX.kQ;
-					para->getParD(i)->QGeomNormalY.kQ = para->getParH(i)->QGeomNormalY.kQ;
-					para->getParD(i)->QGeomNormalZ.kQ = para->getParH(i)->QGeomNormalZ.kQ;
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-					para->cudaAllocGeomNormals(i);
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//Indexarray
-					obj_geomNormalX->initIndex(para->getParH(i)->QGeomNormalX.k, i);
-					obj_geomNormalY->initIndex(para->getParH(i)->QGeomNormalY.k, i);
-					obj_geomNormalZ->initIndex(para->getParH(i)->QGeomNormalZ.k, i);
-					//////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//preprocessing X
-					doubflo* QQX = para->getParH(i)->QGeomNormalX.q27[0];
-					unsigned int sizeQX = para->getParH(i)->QGeomNormalX.kQ;
-					QforBoundaryConditions QX;
-					//////////////////////////////////////////////////////////////////
-					for (int j = 0; j<27; j++) {
-						QX.q27[j] = &QQX[j * sizeQX];
-						obj_geomNormalX->initArray(QX.q27[j], i, j);
-					}//ende der for schleife
-					//////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//preprocessing Y
-					doubflo* QQY = para->getParH(i)->QGeomNormalY.q27[0];
-					unsigned int sizeQY = para->getParH(i)->QGeomNormalY.kQ;
-					QforBoundaryConditions QY;
-					//////////////////////////////////////////////////////////////////
-					for (int j = 0; j<27; j++) {
-						QY.q27[j] = &QQY[j * sizeQY];
-						obj_geomNormalY->initArray(QY.q27[j], i, j);
-					}//ende der for schleife
-					//////////////////////////////////////////////////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//preprocessing Z
-					doubflo* QQZ = para->getParH(i)->QGeomNormalZ.q27[0];
-					unsigned int sizeQZ = para->getParH(i)->QGeomNormalZ.kQ;
-					QforBoundaryConditions QZ;
-					//////////////////////////////////////////////////////////////////
-					for (int j = 0; j<27; j++) {
-						QZ.q27[j] = &QQZ[j * sizeQZ];
-						obj_geomNormalZ->initArray(QZ.q27[j], i, j);
-					}//ende der for schleife
-					//////////////////////////////////////////////////////////////////
-
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-					para->cudaCopyGeomNormals(i);
-					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-				}
-
-			}
-		}
-	}//ende oberstes for
-	//--------------------------------------------------------------------------//
-	//---------------------------------------------------------------------//BIS HIER CODE FUER MARTIN////-------------------------------------------------------------------//
-
-
-	for (int i = 0; i < t; i++) {
-		delete BC_Qs[i];
-	}
-
-	delete BC_Qs;
-	delete obj_geomQ;
-
-	cout << "-----Ende BoundaryQs------" <<endl;
-	
-}
-
-void Interface::setDimensions(Parameter* para)
-{
-	ifstream numberNodes;
-	numberNodes.open(para->getnumberNodes().c_str(), ios::in);
-	if (!numberNodes) {
-		cerr << "Fehler beim Oeffnen von file_NumberNodes" << para->getnumberNodes() << endl;
-		exit(1);
-	}
-	//Dimensionen einlesen
-	string buffer;
-	int bufferInt;
-	std::vector<int> localGridNX;
-	std::vector<int> localGridNY;
-	std::vector<int> localGridNZ;
-
-	for (/*unsigned*/ int i = 0; i <= para->getMaxLevel(); i++) {
-		numberNodes >> buffer;
-		numberNodes >> bufferInt;
-		//cout << "X: " << bufferInt << endl;
-		localGridNX.push_back(bufferInt);
-		numberNodes >> bufferInt;
-		//cout << "Y: " << bufferInt << endl;
-		localGridNY.push_back(bufferInt);
-		numberNodes >> bufferInt;
-		//cout << "Z: " << bufferInt << endl;
-		localGridNZ.push_back(bufferInt);
-	}
-	para->setGridX(localGridNX);
-	para->setGridY(localGridNY);
-	para->setGridZ(localGridNZ);
-}
-
-//Crap by Martin S.
-void Interface::setBoundingBox(Parameter* para)
-{
-	ifstream numberNodes;
-	numberNodes.open(para->getLBMvsSI().c_str(), ios::in);
-	if (!numberNodes) {
-		cerr << "Fehler beim Oeffnen von file_LBMvsSI" << endl;
-		exit(1);
-	}
-	//Dimensionen Bounding Box einlesen
-	doubflo bufferDoubflo;
-	std::vector<doubflo> minX, maxX, minY, maxY, minZ, maxZ;
-
-	for (int i = 0; i <= para->getMaxLevel(); i++) {
-		numberNodes >> bufferDoubflo;
-		//cout << "minX: " << bufferDoubflo << endl;
-		minX.push_back(bufferDoubflo);
-		numberNodes >> bufferDoubflo;
-		//cout << "minY: " << bufferDoubflo << endl;
-		minY.push_back(bufferDoubflo);
-		numberNodes >> bufferDoubflo;
-		//cout << "minZ: " << bufferDoubflo << endl;
-		minZ.push_back(bufferDoubflo);
-		numberNodes >> bufferDoubflo;
-		//cout << "maxX: " << bufferDoubflo << endl;
-		maxX.push_back(bufferDoubflo);
-		numberNodes >> bufferDoubflo;
-		//cout << "maxY: " << bufferDoubflo << endl;
-		maxY.push_back(bufferDoubflo);
-		numberNodes >> bufferDoubflo;
-		//cout << "maxZ: " << bufferDoubflo << endl;
-		maxZ.push_back(bufferDoubflo);
-	}
-	para->setMinCoordX(minX);
-	para->setMinCoordY(minY);
-	para->setMinCoordZ(minZ);
-	para->setMaxCoordX(maxX);
-	para->setMaxCoordY(maxY);
-	para->setMaxCoordZ(maxZ);
-
-	//much more crap by Martin S.
-	std::string tmp;
-	std::vector<doubflo> scaleLBMtoSI;
-	std::vector<doubflo> translateLBMtoSI;
-
-	while (getline(numberNodes, tmp))
-	{
-		if (tmp == "from LBM to SI")
-		{
-			numberNodes >> tmp;
-			numberNodes >> bufferDoubflo;
-			scaleLBMtoSI.push_back(bufferDoubflo);
-			//cout << "Scale LBM to SI X: " << bufferDoubflo << endl;
-			numberNodes >> bufferDoubflo;
-			scaleLBMtoSI.push_back(bufferDoubflo);
-			//cout << "Scale LBM to SI Y: " << bufferDoubflo << endl;
-			numberNodes >> bufferDoubflo;
-			scaleLBMtoSI.push_back(bufferDoubflo);
-			//cout << "Scale LBM to SI Z: " << bufferDoubflo << endl;
-			numberNodes >> tmp;
-			numberNodes >> bufferDoubflo;
-			translateLBMtoSI.push_back(bufferDoubflo);
-			//cout << "Translate LBM to SI X: " << bufferDoubflo << endl;
-			numberNodes >> bufferDoubflo;
-			translateLBMtoSI.push_back(bufferDoubflo);
-			//cout << "Translate LBM to SI Y: " << bufferDoubflo << endl;
-			numberNodes >> bufferDoubflo;
-			translateLBMtoSI.push_back(bufferDoubflo);
-			//cout << "Translate LBM to SI Z: " << bufferDoubflo << endl;
-		}
-	}
-	para->setScaleLBMtoSI(scaleLBMtoSI);
-	para->setTranslateLBMtoSI(translateLBMtoSI);
-
-	numberNodes.close();
-
-}
-
-//Funktion zum ersetzten der periodischen Nachbarn----------------------------------------------------------------------------------
-void Interface::initPeriodicNeigh(vector<vector<vector<unsigned int> > > periodV, vector<vector<unsigned int> > periodIndex,  string way) {
-	vector<unsigned int>neighVec;
-	vector<unsigned int>indexVec;
-	
-	int zaehler = 0;
-
-	for(unsigned int i=0; i<neighX->getLevel();i++) {
-		if(way=="periodic_y"){
-			neighVec = neighY->getVec(i);
-			//cout << " Test 1 " << endl;
-		} 
-		else if(way=="periodic_x"){
-			neighVec = neighX->getVec(i);
-			//cout << " Test 2 " << endl;
-		}
-		else if(way=="periodic_z"){
-			neighVec = neighZ->getVec(i);
-			//cout << " Test 3 " << endl;
-		}
-		else {
-			cout << "Falscher String in periodicValue" << endl;
-			exit(1);
-		}
-
-		//cout << " Test 4 " << endl;
-
-		//cout << " i: " << i << endl;
-		////cout << "Laenge neighVec:" << neighVec.size() << endl;
-		//cout << "Laenge periodIndex: " << periodIndex[i].size() << endl;
-		//cout << "Laenge 1 periodV: " << periodV.size() << endl;
-		//cout << "Laenge 2 periodV: " << periodV[i].size() << endl;
-		//cout << "Laenge 3 periodV: " << periodV[i][0].size() << endl;
-
-		for (vector<unsigned int>::iterator it = periodIndex[i].begin(); it != periodIndex[i].end(); it++) {
-			if(periodV[i][0][zaehler] != 0) {
-				//cout << "Hier schreibe ich im Nachbarn: " << neighVec[*it] << " an der Stelle " << *it << " das rein: " << periodV[i][0][zaehler] << endl;
-				neighVec[*it]=periodV[i][0][zaehler];
-				//cout << " zaehler 1: " << zaehler << endl;				
-			}
-			//cout << " zaehler 2: " << zaehler << endl;				
-
-			zaehler++;
-		}
-
-
-		if(way=="periodic_y"){
-			neighY->setVec(i, neighVec);
-		} 
-		else if(way=="periodic_x"){
-			neighX->setVec(i, neighVec);
-		}
-		else if(way=="periodic_z"){
-			neighZ->setVec(i, neighVec);
-		}
-
-	}
-}
-
-
-void Interface::sortSystem(BoundaryValues **BC_Values, Parameter *para, int t) {
-
-	for (int i = 0; i < t; i++){
-		if (system[i].compare("inlet") == 0){ BC_Values[i] = new BoundaryValues(para->getinletBcValues()); }
-		if (system[i].compare("outlet") == 0){ BC_Values[i] = new BoundaryValues(para->getoutletBcValues()); }
-		if (system[i].compare("back") == 0){ BC_Values[i] = new BoundaryValues(para->getbackBcValues()); }
-		if (system[i].compare("front") == 0){ BC_Values[i] = new BoundaryValues(para->getfrontBcValues()); }
-		if (system[i].compare("top") == 0){ BC_Values[i] = new BoundaryValues(para->gettopBcValues()); }
-		if (system[i].compare("bottom") == 0){ BC_Values[i] = new BoundaryValues(para->getbottomBcValues());}
-	}
-}
-
-void Interface::sortSystem(BoundaryQs **BC_Qs, Parameter *para, int t) {
-
-	for (int i = 0; i < t; i++){
-		if (system[i].compare("inlet") == 0){ BC_Qs[i] = new BoundaryQs(para->getinletBcQs(), false); }
-		if (system[i].compare("outlet") == 0){ BC_Qs[i] = new BoundaryQs(para->getoutletBcQs(), false); }
-		if (system[i].compare("back") == 0){ BC_Qs[i] = new BoundaryQs(para->getbackBcQs(), false); }
-		if (system[i].compare("front") == 0){ BC_Qs[i] = new BoundaryQs(para->getfrontBcQs(), false); }
-		if (system[i].compare("top") == 0){ BC_Qs[i] = new BoundaryQs(para->gettopBcQs(), false); }
-		if (system[i].compare("bottom") == 0){ BC_Qs[i] = new BoundaryQs(para->getbottomBcQs(), false); }
-	}
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-void Interface::rearrangeGeometry(Parameter* para, int lev)
-{
-	//redefine fluid nodes
-	for (int index = 0; index < para->getParH(lev)->size_Mat_SP; index++)
-	{
-		if (para->getParH(lev)->geoSP[index] == GEO_FLUID_OLD)
-		{
-			para->getParH(lev)->geoSP[index] = GEO_FLUID;
-		}
-	}
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Interface.h b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Interface.h
deleted file mode 100644
index a74981313..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Interface.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#pragma once
-#include "Standard.h"
-//#include "VTKwriter.h"
-#include "GPU/GPU_Interface.h"
-#include "Parameter/Parameter.h"
-#include "Temperature/FindTemperature.h"
-#include "OffsetScale.h"
-#include "BoundaryValues.h"
-#include <cstdlib>
-
-
-using namespace std;
-class Interface
-{
-private:
-	bool binaer;
-	string *system;
-	string *way;
-	CoordNeighborGeoV *neighX, *neighY, *neighZ, *neighWSB;
-public:
-	Interface(bool binaer);
-	~Interface(void);
-	void allocArrays_CoordNeighborGeo(Parameter* para);
-	void allocArrays_OffsetScale(Parameter* para);
-	void allocArrays_BoundaryValues(Parameter* para);
-	void allocArrays_BoundaryQs(Parameter* para);
-	bool getBinaer();
-	void setDimensions(Parameter* para);
-	void setBoundingBox(Parameter* para);
-	void sortSystem(BoundaryValues **BC_Values, Parameter* para, int t);
-	void sortSystem(BoundaryQs **BC_Qs, Parameter* para, int t);
-
-	void initPeriodicNeigh(vector<vector<vector<unsigned int> > > periodV, vector<vector<unsigned int> > periodIndex, string way);
-
-	void rearrangeGeometry(Parameter* para, int lev);
-};
-
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/MeasuredPoints.cpp b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/MeasuredPoints.cpp
deleted file mode 100644
index 2416f75d4..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/MeasuredPoints.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-#include "MeasuredPoints.h"
-#include <stdlib.h>
-
-MeasuredPoints::MeasuredPoints(void)
-{
-}
-
-MeasuredPoints::MeasuredPoints(string ad){
-	file.open(ad.c_str(), ios::in | ios::binary);
-
-	if (!file) {
-		cerr << "Fehler beim Oeffnen Measured Points" <<endl;
-			exit(1);
-	}
-
-	this->init();		
-
-}
-
-MeasuredPoints::~MeasuredPoints(void)
-{
-}
-
-
-
-
-void MeasuredPoints::init() {
-	
-	string bufferString;
-	unsigned int bufferInt;
-
-	getline(file,bufferString);
-	getline(file,bufferString);//level einlesen
-	level = atoi(bufferString.c_str());
-
-	this->vec_Size.resize(level);
-	this->vec2D_data.resize(level);
-
-	for (int i=0; i<level;i++) {
-		getline(file,bufferString);
-		bufferInt = atoi(bufferString.c_str()); 
-
-		this->vec_Size[i]=bufferInt;
-
-		this->vec2D_data[i].resize(vec_Size[i]);
-		if(vec_Size[i] != 0) {
-			for ( int j=0; j<vec_Size[i]; j++) {
-				getline(file,bufferString);
-				bufferInt = atoi(bufferString.c_str()); 
-				this->vec2D_data[i][j]=bufferInt;
-			}
-		}
-
-
-	}
-
-
-
-}
\ No newline at end of file
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/MeasuredPoints.h b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/MeasuredPoints.h
deleted file mode 100644
index 74f7c1391..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/MeasuredPoints.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#pragma once
-#include "Standard.h"
-#include "CoordNeighborGeoV.h"
-
-using namespace std;
-
-class MeasuredPoints 
-	: public CoordNeighborGeoV 
-{
-private:
-	
-public:
-	MeasuredPoints(void);
-	MeasuredPoints(string ad);
-	~MeasuredPoints(void);
-
-	void init();
-
-};
-
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/OffsetScale.cpp b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/OffsetScale.cpp
deleted file mode 100644
index b8e571531..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/OffsetScale.cpp
+++ /dev/null
@@ -1,133 +0,0 @@
-#include "OffsetScale.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-using namespace std;
-
-OffsetScale::OffsetScale(string ad, bool off)
-{
-	file.open(ad.c_str(), ios::in);
-
-	if (!file) {
-		cerr << "Fehler beim Oeffnen" <<endl;
-			exit(1);
-	}
-	if(off==true){
-		initOffset();
-	}else {
-		init();
-	}
-}
-OffsetScale::~OffsetScale(void)
-{
-	file.close();
-}
-
-void OffsetScale::init() {
-	//Level aus der ersten Zeile wird ausgelesen
-	string buffer;
-	unsigned int bufferInt;
-
-	getline(file,buffer);
-	level = atoi(buffer.c_str());
-
-	//Schleife zum Einlesen der Levelgroessen
-	for(unsigned int i=1; i<=level; i++) {
-		getline(file,buffer);
-		unsigned int bufferInt = atoi(buffer.c_str()); //eingelesene Zeile wird zum Integer gecastet
-		vec_Size.push_back(bufferInt);
-		getline(file,buffer); //die Zeile mit den Koordinaten muss uebersprungen werden
-	}
-	
-	file.clear();
-	file.seekg (0, ios::beg); // file wird wieder auf den Anfang gesetzt
-	getline(file,buffer); //level wird ignoriert
-
-
-	//einlesen der Werte
-	vec2D_data.resize(level+1);
-	for(unsigned lvl = 0; lvl < level; lvl++){/////////////Unterschied zu CoordNeighborGeoV:  < statt <=//////////////////////
-		getline(file,buffer); // Groesse ignorieren
-		for (unsigned int i = 0; i < vec_Size[lvl]; i++)/////////////Unterschied zu CoordNeighborGeoV:  < statt <=//////////////////////
-		{
-			file >> bufferInt;
-			vec2D_data[lvl].push_back(bufferInt);
-		}
-		getline(file, buffer);
-	}
-}
-
-void OffsetScale::initOffset() {
-	file.clear();
-	file.seekg (0, ios::beg); // file wird wieder auf den Anfang gesetzt
-	//Level aus der ersten Zeile wird ausgelesen
-	string buffer;
-	doubflo bufferDouble;
-
-	getline(file,buffer);
-	stringstream s1(buffer);
-	s1 >> level;
-
-	//Schleife zum Einlesen der Levelgroessen
-	for(unsigned int i=1; i<=level; i++) {
-		getline(file,buffer);
-		unsigned int bufferInt = atoi(buffer.c_str()); //eingelesene Zeile wird zum Integer gecastet
-		vec_Size.push_back(bufferInt);
-		getline(file,buffer); //die Zeile mit den Koordinaten muss uebersprungen werden
-	}
-	
-	file.seekg (0, ios::beg); // file wird wieder auf den Anfang gesetzt
-	getline(file,buffer); //level wird ignoriert
-
-	//einlesen der werte
-	vec2D_dataOffset.resize(level+1);
-	for(unsigned lvl = 0; lvl < level; lvl++){/////////////Unterschied zu CoordNeighborGeoV:  < statt <=//////////////////////
-		getline(file,buffer); // Groesse ignorieren
-		for (unsigned int i = 0; i < vec_Size[lvl]*3; i++)/////////////Unterschied zu CoordNeighborGeoV:  < statt <=//////////////////////
-														  /////////////Unterschied zu Scale:  vec_Size[lvl]*3       //////////////////////
-		{
-			file >> bufferDouble;
-			vec2D_dataOffset[lvl].push_back(bufferDouble);
-		}
-		getline(file, buffer);
-	}
-}
-
-
-void OffsetScale::initArrayOffset(doubflo *x_ptr,doubflo *y_ptr,doubflo *z_ptr, unsigned int level) {
-	
-	int zaehler=0;
-	int n=0;
-	int x_help=0;
-	int y_help=1;
-	int z_help=2;
-	int x=0;
-	int y=0;
-	int z=0;
-
-	if (x_ptr != NULL && y_ptr !=NULL && z_ptr !=NULL) {
-		for (vector<vector<doubflo> >::iterator it = vec2D_dataOffset.begin() ; it != vec2D_dataOffset.end(); it++) {		
-			if(zaehler==level) {
-				for(vector<doubflo>::iterator it2 = it->begin(); it2 != it->end(); it2++){
-					if(n==x_help){
-						x_ptr[x]=*it2;
-						x_help=x_help+3;
-						x++;
-					} else if(n==y_help){
-						y_ptr[y]=*it2;
-						y_help=y_help+3;
-						y++;
-					} else if(n==z_help){
-						z_ptr[z]=*it2;
-						z_help=z_help+3;
-						z++;
-					}
-					n++;
-				}
-			}
-			zaehler++;	
-		}
-
-	}
-
-}
\ No newline at end of file
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/OffsetScale.h b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/OffsetScale.h
deleted file mode 100644
index 12f566211..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/OffsetScale.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#pragma once
-#include "CoordNeighborGeoV.h"
-class OffsetScale :
-	public CoordNeighborGeoV
-{
-private:
-	vector<doubflo>vec1D_dataOffset; //das Feld mit Werten, temporär zum Füllen von vec2D
-	vector<vector<doubflo> >vec2D_dataOffset; //alle Felder mit Werten gegliedert nach Level
-public:
-	OffsetScale(string ad, bool off);
-	~OffsetScale(void);
-	void init();
-
-	void initOffset();
-	void initArrayOffset(doubflo *x_ptr,doubflo *y_ptr,doubflo *z_ptr, unsigned int level);
-};
-
diff --git a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Standard.h b/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Standard.h
deleted file mode 100644
index b70c291f6..000000000
--- a/gpu/src/VirtualFluids_GPU/Interface_OpenFOAM/Standard.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <iostream>
-#include <vector>
-#include <fstream>
-#include <sstream>
-#include <string>
-#include "math.h"
-#include "stdint.h"
-
-#include "LBM/LB.h"
-
-
-
-//typedef double doubflo;
\ No newline at end of file
diff --git a/gpu/src/VirtualFluids_GPU/Output/FileWriter.cpp b/gpu/src/VirtualFluids_GPU/Output/FileWriter.cpp
index e78641dca..16b56930f 100644
--- a/gpu/src/VirtualFluids_GPU/Output/FileWriter.cpp
+++ b/gpu/src/VirtualFluids_GPU/Output/FileWriter.cpp
@@ -20,7 +20,7 @@
 #include "LBM/LB.h"
 #include "LBM/D3Q27.h"
 
-#include <VirtualFluidsBasics/basics/writer/WbWriterVtkXmlBinary.h>
+#include <basics/writer/WbWriterVtkXmlBinary.h>
 
 void FileWriter::writeInit(std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaManager)
 {
diff --git a/gpu/src/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp b/gpu/src/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp
index 7e989d2c5..aebef163d 100644
--- a/gpu/src/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp
+++ b/gpu/src/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp
@@ -9,10 +9,10 @@
 #include "LBM/LB.h"
 #include "LBM/D3Q27.h"
 #include "Parameter/Parameter.h"
-#include "VirtualFluidsBasics/basics/utilities/UbSystem.h"
-#include <VirtualFluidsBasics/basics/writer/WbWriterVtkXmlBinary.h>
-#include <VirtualFluidsBasics/basics/writer/WbWriterVtkXmlASCII.h>
-#include <VirtualFluidsBasics/basics/utilities/UbTuple.h>
+#include "basics/utilities/UbSystem.h"
+#include <basics/writer/WbWriterVtkXmlBinary.h>
+#include <basics/writer/WbWriterVtkXmlASCII.h>
+#include <basics/utilities/UbTuple.h>
 
 using namespace std;
 
diff --git a/gpu/src/VirtualFluids_GPU/Parameter/Parameter.cpp b/gpu/src/VirtualFluids_GPU/Parameter/Parameter.cpp
index daef7ff2e..0415003d2 100644
--- a/gpu/src/VirtualFluids_GPU/Parameter/Parameter.cpp
+++ b/gpu/src/VirtualFluids_GPU/Parameter/Parameter.cpp
@@ -17,8 +17,8 @@
 
 #include "Core/Input/ConfigData/ConfigData.h"
 #include "Core/StringUtilities/StringUtil.h"
-#include "VirtualFluids_GPU/Communication/Communicator.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/Mapper/KernelMapper/KernelMapper.h"
+#include "Communication/Communicator.h"
+#include "Kernel/Utilities/Mapper/KernelMapper/KernelMapper.h"
 //#ifdef WIN32
 //   #include <Winsock2.h>
 //#endif
@@ -654,9 +654,9 @@ void Parameter::initParameter()
 			parH[i]->mTtoWx                = (real)pow(0.5f,i);
 			parH[i]->mTtoWy                = (real)pow(0.5f,i);
 			parH[i]->mTtoWz                = (real)pow(0.5f,i);
-			parH[i]->cTtoWx                = (real)(STARTOFFX/2.f + (parH[i]->gridNX+1.f)/4.f); //funzt nur für zwei level
-			parH[i]->cTtoWy                = (real)(STARTOFFY/2.f + (parH[i]->gridNY+1.f)/4.f); //funzt nur für zwei level
-			parH[i]->cTtoWz                = (real)(STARTOFFZ/2.f + (parH[i]->gridNZ+1.f)/4.f); //funzt nur für zwei level
+			parH[i]->cTtoWx                = (real)(STARTOFFX/2.f + (parH[i]->gridNX+1.f)/4.f); //funzt nur f�r zwei level
+			parH[i]->cTtoWy                = (real)(STARTOFFY/2.f + (parH[i]->gridNY+1.f)/4.f); //funzt nur f�r zwei level
+			parH[i]->cTtoWz                = (real)(STARTOFFZ/2.f + (parH[i]->gridNZ+1.f)/4.f); //funzt nur f�r zwei level
 			////MGs Trafo///////////////////////////////////////////////////////////////
 			//parH[i]->cStartx               = (real)parH[i]->XdistKn;
 			//parH[i]->cStarty               = (real)parH[i]->XdistKn;
@@ -896,21 +896,21 @@ void Parameter::fillSparse(int level)
 				//parH[level]->vx_SP[parH[level]->k[m]] = (real)((32. * 32. * 3.) / (1000.*(real)parH[level]->gridNX));//(real)parH[level]->gridNX / (real)1000 * 3.0;
 				//parH[level]->vy_SP[parH[level]->k[m]] = (real)((getVelocity() * sin(2.0 * i / parH[level]->gridNX * PI) * cos(2.0 * k / parH[level]->gridNZ * PI)) * (32. / (real)parH[level]->gridNX));
 				//parH[level]->vz_SP[parH[level]->k[m]] = (real)0.0f;
-				//schräg x
+				//schr�g x
 				// 			parH[level]->vx_SP[parH[level]->k[m]]        = (real)((32. * 32. * 3.)/(1000.*(real)parH[level]->gridNX) + (getVelocity() * cos((2.0 * k / parH[level]->gridNZ * PI) + (2.0 * i / parH[level]->gridNX * PI))));
 				// 			parH[level]->vy_SP[parH[level]->k[m]]        = (real)0.0;
 				// 			parH[level]->vz_SP[parH[level]->k[m]]        = (real)(getVelocity() * cos((2.0 * k / parH[level]->gridNZ * PI) + (2.0 * i / parH[level]->gridNX * PI)));
-				//schräg z
+				//schr�g z
 				//parH[level]->vx_SP[parH[level]->k[m]]        = (real)(getVelocity() * std::cos((2.0 * k / parH[level]->gridNZ * PI) + (2.0 * i / parH[level]->gridNX * PI)));
 				//parH[level]->vy_SP[parH[level]->k[m]]        = (real)0.0;
 				//parH[level]->vz_SP[parH[level]->k[m]]        = (real)((32. * 32. * 3.)/(1000.*(real)parH[level]->gridNZ) + (getVelocity() * std::cos((2.0 * k / parH[level]->gridNZ * PI) + (2.0 * i / parH[level]->gridNX * PI))));
 
 				  			//Taylor Green Vortex uniform
 				  			parH[level]->rho_SP[parH[level]->k[m]]       = (real)((getVelocity()*getVelocity())*3.0/4.0*(cos((i)*4.0*PI/(real)parH[level]->gridNX)+cos((k)*4.0*PI/(real)parH[level]->gridNZ)))*(real)(parH[level]->gridNZ)/(real)(parH[level]->gridNX);
-				  			//inkl. überlagerter Geschwindigkeit
+				  			//inkl. �berlagerter Geschwindigkeit
 				  // 			parH[level]->vx_SP[parH[level]->k[m]]        = (real)((32. * 32. * 3.)/(1000.*(real)parH[level]->gridNX) + getVelocity()*sin(((i)*2.0*PI/(real)parH[level]->gridNX))*cos((k)*2.0*PI/(real)parH[level]->gridNZ));
 				  			parH[level]->vx_SP[parH[level]->k[m]]        = (real)((32. * 32. * 3.)/(1000. * 32.) * getVelocity() / 0.001 + getVelocity()*sin(((i)*2.0*PI/(real)parH[level]->gridNX))*cos((k)*2.0*PI/(real)parH[level]->gridNZ));
-				  			//ohne überlagerter Geschwindigkeit
+				  			//ohne �berlagerter Geschwindigkeit
 				  //			parH[level]->vx_SP[parH[level]->k[m]]        = (real)(getVelocity()*sin(((i)*2.0*PI/(real)parH[level]->gridNX))*cos((k)*2.0*PI/(real)parH[level]->gridNZ));
 				  			parH[level]->vy_SP[parH[level]->k[m]]        = (real)0.0;
 				  			parH[level]->vz_SP[parH[level]->k[m]]        = (real)(-getVelocity()*cos(((i)*2.0*PI/(real)parH[level]->gridNX))*sin((k)*2.0*PI/(real)parH[level]->gridNZ))*(real)(parH[level]->gridNZ)/(real)(parH[level]->gridNX);            
@@ -1708,7 +1708,7 @@ void Parameter::cudaFreeGeomValuesBC(int lev)
 	checkCudaErrors( cudaFreeHost(parH[lev]->QGeom.Vy));
 	checkCudaErrors( cudaFreeHost(parH[lev]->QGeom.Vz));
 }
-//Geometrie inkl. Normale für Slip
+//Geometrie inkl. Normale f�r Slip
 void Parameter::cudaAllocGeomNormals(int lev)
 {
 	unsigned int mem_size_Q_k      = sizeof(int)*parH[lev]->QGeomNormalX.kQ;
@@ -1755,7 +1755,7 @@ void Parameter::cudaFreeGeomNormals(int lev)
 	checkCudaErrors( cudaFreeHost(parH[lev]->QGeomNormalZ.q27[0]));
 	checkCudaErrors( cudaFreeHost(parH[lev]->QGeomNormalZ.k));
 }
-//Geometrie inkl. Normale für Inflow
+//Geometrie inkl. Normale f�r Inflow
 void Parameter::cudaAllocInflowNormals(int lev)
 {
 	unsigned int mem_size_Q_k      = sizeof(int)*parH[lev]->QInflowNormalX.kQ;
@@ -1802,7 +1802,7 @@ void Parameter::cudaFreeInflowNormals(int lev)
 	checkCudaErrors( cudaFreeHost(parH[lev]->QInflowNormalZ.q27[0]));
 	checkCudaErrors( cudaFreeHost(parH[lev]->QInflowNormalZ.k));
 }
-//Geometrie inkl. Normale für Outflow
+//Geometrie inkl. Normale f�r Outflow
 void Parameter::cudaAllocOutflowNormals(int lev)
 {
 	unsigned int mem_size_Q_k      = sizeof(int)*parH[lev]->QOutflowNormalX.kQ;
diff --git a/gpu/src/GridGenerator/CMakeLists.txt b/src/gpu/GridGenerator/CMakeLists.txt
similarity index 98%
rename from gpu/src/GridGenerator/CMakeLists.txt
rename to src/gpu/GridGenerator/CMakeLists.txt
index 052da46b8..9e10f8bf0 100644
--- a/gpu/src/GridGenerator/CMakeLists.txt
+++ b/src/gpu/GridGenerator/CMakeLists.txt
@@ -19,7 +19,7 @@ include (${CMAKE_PATH}/3rd/OpenMP.cmake)
 
 vf_get_library_name(library_name)
 target_include_directories(${library_name} PRIVATE "${CMAKE_SOURCE_DIR}/src/basics")
-target_include_directories(${library_name} PRIVATE "${CMAKE_SOURCE_DIR}/gpu/src")
+target_include_directories(${library_name} PRIVATE "${CMAKE_SOURCE_DIR}/src/gpu")
 target_include_directories(${library_name} PRIVATE "${CMAKE_SOURCE_DIR}/src/basics/Core")
 
 
diff --git a/gpu/src/GridGenerator/StreetPointFinder/JunctionReader.cpp b/src/gpu/GridGenerator/StreetPointFinder/JunctionReader.cpp
similarity index 100%
rename from gpu/src/GridGenerator/StreetPointFinder/JunctionReader.cpp
rename to src/gpu/GridGenerator/StreetPointFinder/JunctionReader.cpp
diff --git a/gpu/src/GridGenerator/StreetPointFinder/JunctionReader.h b/src/gpu/GridGenerator/StreetPointFinder/JunctionReader.h
similarity index 100%
rename from gpu/src/GridGenerator/StreetPointFinder/JunctionReader.h
rename to src/gpu/GridGenerator/StreetPointFinder/JunctionReader.h
diff --git a/gpu/src/GridGenerator/StreetPointFinder/SinkReader.cpp b/src/gpu/GridGenerator/StreetPointFinder/SinkReader.cpp
similarity index 100%
rename from gpu/src/GridGenerator/StreetPointFinder/SinkReader.cpp
rename to src/gpu/GridGenerator/StreetPointFinder/SinkReader.cpp
diff --git a/gpu/src/GridGenerator/StreetPointFinder/SinkReader.h b/src/gpu/GridGenerator/StreetPointFinder/SinkReader.h
similarity index 100%
rename from gpu/src/GridGenerator/StreetPointFinder/SinkReader.h
rename to src/gpu/GridGenerator/StreetPointFinder/SinkReader.h
diff --git a/gpu/src/GridGenerator/StreetPointFinder/SourceReader.cpp b/src/gpu/GridGenerator/StreetPointFinder/SourceReader.cpp
similarity index 100%
rename from gpu/src/GridGenerator/StreetPointFinder/SourceReader.cpp
rename to src/gpu/GridGenerator/StreetPointFinder/SourceReader.cpp
diff --git a/gpu/src/GridGenerator/StreetPointFinder/SourceReader.h b/src/gpu/GridGenerator/StreetPointFinder/SourceReader.h
similarity index 100%
rename from gpu/src/GridGenerator/StreetPointFinder/SourceReader.h
rename to src/gpu/GridGenerator/StreetPointFinder/SourceReader.h
diff --git a/gpu/src/GridGenerator/StreetPointFinder/StreetPointFinder.cpp b/src/gpu/GridGenerator/StreetPointFinder/StreetPointFinder.cpp
similarity index 100%
rename from gpu/src/GridGenerator/StreetPointFinder/StreetPointFinder.cpp
rename to src/gpu/GridGenerator/StreetPointFinder/StreetPointFinder.cpp
diff --git a/gpu/src/GridGenerator/StreetPointFinder/StreetPointFinder.h b/src/gpu/GridGenerator/StreetPointFinder/StreetPointFinder.h
similarity index 100%
rename from gpu/src/GridGenerator/StreetPointFinder/StreetPointFinder.h
rename to src/gpu/GridGenerator/StreetPointFinder/StreetPointFinder.h
diff --git a/gpu/src/GridGenerator/StreetPointFinder/package.include b/src/gpu/GridGenerator/StreetPointFinder/package.include
similarity index 100%
rename from gpu/src/GridGenerator/StreetPointFinder/package.include
rename to src/gpu/GridGenerator/StreetPointFinder/package.include
diff --git a/gpu/src/GridGenerator/geometries/Arrow/Arrow.h b/src/gpu/GridGenerator/geometries/Arrow/Arrow.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Arrow/Arrow.h
rename to src/gpu/GridGenerator/geometries/Arrow/Arrow.h
diff --git a/gpu/src/GridGenerator/geometries/Arrow/ArrowImp.cpp b/src/gpu/GridGenerator/geometries/Arrow/ArrowImp.cpp
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Arrow/ArrowImp.cpp
rename to src/gpu/GridGenerator/geometries/Arrow/ArrowImp.cpp
diff --git a/gpu/src/GridGenerator/geometries/Arrow/ArrowImp.h b/src/gpu/GridGenerator/geometries/Arrow/ArrowImp.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Arrow/ArrowImp.h
rename to src/gpu/GridGenerator/geometries/Arrow/ArrowImp.h
diff --git a/gpu/src/GridGenerator/geometries/Arrow/package.include b/src/gpu/GridGenerator/geometries/Arrow/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Arrow/package.include
rename to src/gpu/GridGenerator/geometries/Arrow/package.include
diff --git a/gpu/src/GridGenerator/geometries/BoundingBox/BoundingBox.cu b/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBox.cu
similarity index 100%
rename from gpu/src/GridGenerator/geometries/BoundingBox/BoundingBox.cu
rename to src/gpu/GridGenerator/geometries/BoundingBox/BoundingBox.cu
diff --git a/gpu/src/GridGenerator/geometries/BoundingBox/BoundingBox.h b/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBox.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/BoundingBox/BoundingBox.h
rename to src/gpu/GridGenerator/geometries/BoundingBox/BoundingBox.h
diff --git a/gpu/src/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp b/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp
similarity index 100%
rename from gpu/src/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp
rename to src/gpu/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp
diff --git a/gpu/src/GridGenerator/geometries/BoundingBox/package.include b/src/gpu/GridGenerator/geometries/BoundingBox/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/BoundingBox/package.include
rename to src/gpu/GridGenerator/geometries/BoundingBox/package.include
diff --git a/gpu/src/GridGenerator/geometries/Conglomerate/Conglomerate.cu b/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.cu
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Conglomerate/Conglomerate.cu
rename to src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.cu
diff --git a/gpu/src/GridGenerator/geometries/Conglomerate/Conglomerate.h b/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Conglomerate/Conglomerate.h
rename to src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.h
diff --git a/gpu/src/GridGenerator/geometries/Conglomerate/package.include b/src/gpu/GridGenerator/geometries/Conglomerate/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Conglomerate/package.include
rename to src/gpu/GridGenerator/geometries/Conglomerate/package.include
diff --git a/gpu/src/GridGenerator/geometries/Cuboid/Cuboid.cu b/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.cu
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Cuboid/Cuboid.cu
rename to src/gpu/GridGenerator/geometries/Cuboid/Cuboid.cu
diff --git a/gpu/src/GridGenerator/geometries/Cuboid/Cuboid.h b/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Cuboid/Cuboid.h
rename to src/gpu/GridGenerator/geometries/Cuboid/Cuboid.h
diff --git a/gpu/src/GridGenerator/geometries/Cuboid/package.include b/src/gpu/GridGenerator/geometries/Cuboid/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Cuboid/package.include
rename to src/gpu/GridGenerator/geometries/Cuboid/package.include
diff --git a/gpu/src/GridGenerator/geometries/Object.cu b/src/gpu/GridGenerator/geometries/Object.cu
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Object.cu
rename to src/gpu/GridGenerator/geometries/Object.cu
diff --git a/gpu/src/GridGenerator/geometries/Object.h b/src/gpu/GridGenerator/geometries/Object.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Object.h
rename to src/gpu/GridGenerator/geometries/Object.h
diff --git a/gpu/src/GridGenerator/geometries/Point/Point.cpp b/src/gpu/GridGenerator/geometries/Point/Point.cpp
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Point/Point.cpp
rename to src/gpu/GridGenerator/geometries/Point/Point.cpp
diff --git a/gpu/src/GridGenerator/geometries/Point/Point.h b/src/gpu/GridGenerator/geometries/Point/Point.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Point/Point.h
rename to src/gpu/GridGenerator/geometries/Point/Point.h
diff --git a/gpu/src/GridGenerator/geometries/Point/package.include b/src/gpu/GridGenerator/geometries/Point/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Point/package.include
rename to src/gpu/GridGenerator/geometries/Point/package.include
diff --git a/gpu/src/GridGenerator/geometries/Sphere/Sphere.cu b/src/gpu/GridGenerator/geometries/Sphere/Sphere.cu
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Sphere/Sphere.cu
rename to src/gpu/GridGenerator/geometries/Sphere/Sphere.cu
diff --git a/gpu/src/GridGenerator/geometries/Sphere/Sphere.h b/src/gpu/GridGenerator/geometries/Sphere/Sphere.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Sphere/Sphere.h
rename to src/gpu/GridGenerator/geometries/Sphere/Sphere.h
diff --git a/gpu/src/GridGenerator/geometries/Sphere/package.include b/src/gpu/GridGenerator/geometries/Sphere/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Sphere/package.include
rename to src/gpu/GridGenerator/geometries/Sphere/package.include
diff --git a/gpu/src/GridGenerator/geometries/Triangle/Triangle.cu b/src/gpu/GridGenerator/geometries/Triangle/Triangle.cu
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Triangle/Triangle.cu
rename to src/gpu/GridGenerator/geometries/Triangle/Triangle.cu
diff --git a/gpu/src/GridGenerator/geometries/Triangle/Triangle.h b/src/gpu/GridGenerator/geometries/Triangle/Triangle.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Triangle/Triangle.h
rename to src/gpu/GridGenerator/geometries/Triangle/Triangle.h
diff --git a/gpu/src/GridGenerator/geometries/Triangle/TriangleException.h b/src/gpu/GridGenerator/geometries/Triangle/TriangleException.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Triangle/TriangleException.h
rename to src/gpu/GridGenerator/geometries/Triangle/TriangleException.h
diff --git a/gpu/src/GridGenerator/geometries/Triangle/package.include b/src/gpu/GridGenerator/geometries/Triangle/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Triangle/package.include
rename to src/gpu/GridGenerator/geometries/Triangle/package.include
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu
rename to src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.h b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
rename to src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.cpp b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.cpp
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.cpp
rename to src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.cpp
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.h b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.h
rename to src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.h
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/package.include b/src/gpu/GridGenerator/geometries/TriangularMesh/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/package.include
rename to src/gpu/GridGenerator/geometries/TriangularMesh/package.include
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.cpp b/src/gpu/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.cpp
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.cpp
rename to src/gpu/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.cpp
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.h b/src/gpu/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.h
rename to src/gpu/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.h
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/package.include b/src/gpu/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/package.include
rename to src/gpu/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/package.include
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.cpp b/src/gpu/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.cpp
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.cpp
rename to src/gpu/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.cpp
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.h b/src/gpu/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.h
rename to src/gpu/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.h
diff --git a/gpu/src/GridGenerator/geometries/TriangularMesh/triangleRefinement/package.include b/src/gpu/GridGenerator/geometries/TriangularMesh/triangleRefinement/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/TriangularMesh/triangleRefinement/package.include
rename to src/gpu/GridGenerator/geometries/TriangularMesh/triangleRefinement/package.include
diff --git a/gpu/src/GridGenerator/geometries/Vertex/Vertex.cu b/src/gpu/GridGenerator/geometries/Vertex/Vertex.cu
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Vertex/Vertex.cu
rename to src/gpu/GridGenerator/geometries/Vertex/Vertex.cu
diff --git a/gpu/src/GridGenerator/geometries/Vertex/Vertex.h b/src/gpu/GridGenerator/geometries/Vertex/Vertex.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Vertex/Vertex.h
rename to src/gpu/GridGenerator/geometries/Vertex/Vertex.h
diff --git a/gpu/src/GridGenerator/geometries/Vertex/package.include b/src/gpu/GridGenerator/geometries/Vertex/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/Vertex/package.include
rename to src/gpu/GridGenerator/geometries/Vertex/package.include
diff --git a/gpu/src/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.cu b/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.cu
similarity index 100%
rename from gpu/src/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.cu
rename to src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.cu
diff --git a/gpu/src/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h b/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h
similarity index 100%
rename from gpu/src/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h
rename to src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h
diff --git a/gpu/src/GridGenerator/geometries/VerticalCylinder/package.include b/src/gpu/GridGenerator/geometries/VerticalCylinder/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/VerticalCylinder/package.include
rename to src/gpu/GridGenerator/geometries/VerticalCylinder/package.include
diff --git a/gpu/src/GridGenerator/geometries/package.include b/src/gpu/GridGenerator/geometries/package.include
similarity index 100%
rename from gpu/src/GridGenerator/geometries/package.include
rename to src/gpu/GridGenerator/geometries/package.include
diff --git a/gpu/src/GridGenerator/global.h b/src/gpu/GridGenerator/global.h
similarity index 100%
rename from gpu/src/GridGenerator/global.h
rename to src/gpu/GridGenerator/global.h
diff --git a/gpu/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp b/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp
similarity index 100%
rename from gpu/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp
rename to src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp
diff --git a/gpu/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h b/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h
rename to src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h
diff --git a/gpu/src/GridGenerator/grid/BoundaryConditions/Side.cpp b/src/gpu/GridGenerator/grid/BoundaryConditions/Side.cpp
similarity index 100%
rename from gpu/src/GridGenerator/grid/BoundaryConditions/Side.cpp
rename to src/gpu/GridGenerator/grid/BoundaryConditions/Side.cpp
diff --git a/gpu/src/GridGenerator/grid/BoundaryConditions/Side.h b/src/gpu/GridGenerator/grid/BoundaryConditions/Side.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/BoundaryConditions/Side.h
rename to src/gpu/GridGenerator/grid/BoundaryConditions/Side.h
diff --git a/gpu/src/GridGenerator/grid/BoundaryConditions/package.include b/src/gpu/GridGenerator/grid/BoundaryConditions/package.include
similarity index 100%
rename from gpu/src/GridGenerator/grid/BoundaryConditions/package.include
rename to src/gpu/GridGenerator/grid/BoundaryConditions/package.include
diff --git a/gpu/src/GridGenerator/grid/Cell.h b/src/gpu/GridGenerator/grid/Cell.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/Cell.h
rename to src/gpu/GridGenerator/grid/Cell.h
diff --git a/gpu/src/GridGenerator/grid/Field.cu b/src/gpu/GridGenerator/grid/Field.cu
similarity index 100%
rename from gpu/src/GridGenerator/grid/Field.cu
rename to src/gpu/GridGenerator/grid/Field.cu
diff --git a/gpu/src/GridGenerator/grid/Field.h b/src/gpu/GridGenerator/grid/Field.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/Field.h
rename to src/gpu/GridGenerator/grid/Field.h
diff --git a/gpu/src/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/Grid.h
rename to src/gpu/GridGenerator/grid/Grid.h
diff --git a/gpu/src/GridGenerator/grid/GridBuilder/GridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridBuilder/GridBuilder.h
rename to src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
diff --git a/gpu/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
rename to src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
diff --git a/gpu/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
rename to src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
diff --git a/gpu/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
rename to src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
diff --git a/gpu/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
rename to src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
diff --git a/gpu/src/GridGenerator/grid/GridBuilder/package.include b/src/gpu/GridGenerator/grid/GridBuilder/package.include
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridBuilder/package.include
rename to src/gpu/GridGenerator/grid/GridBuilder/package.include
diff --git a/gpu/src/GridGenerator/grid/GridFactory.cpp b/src/gpu/GridGenerator/grid/GridFactory.cpp
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridFactory.cpp
rename to src/gpu/GridGenerator/grid/GridFactory.cpp
diff --git a/gpu/src/GridGenerator/grid/GridFactory.h b/src/gpu/GridGenerator/grid/GridFactory.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridFactory.h
rename to src/gpu/GridGenerator/grid/GridFactory.h
diff --git a/gpu/src/GridGenerator/grid/GridImp.cu b/src/gpu/GridGenerator/grid/GridImp.cu
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridImp.cu
rename to src/gpu/GridGenerator/grid/GridImp.cu
diff --git a/gpu/src/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridImp.h
rename to src/gpu/GridGenerator/grid/GridImp.h
diff --git a/gpu/src/GridGenerator/grid/GridInterface.cu b/src/gpu/GridGenerator/grid/GridInterface.cu
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridInterface.cu
rename to src/gpu/GridGenerator/grid/GridInterface.cu
diff --git a/gpu/src/GridGenerator/grid/GridInterface.h b/src/gpu/GridGenerator/grid/GridInterface.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridInterface.h
rename to src/gpu/GridGenerator/grid/GridInterface.h
diff --git a/gpu/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp b/src/gpu/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp
rename to src/gpu/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp
diff --git a/gpu/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h b/src/gpu/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h
rename to src/gpu/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h
diff --git a/gpu/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/package.include b/src/gpu/GridGenerator/grid/GridStrategy/GridCpuStrategy/package.include
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/package.include
rename to src/gpu/GridGenerator/grid/GridStrategy/GridCpuStrategy/package.include
diff --git a/gpu/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.cpp b/src/gpu/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.cpp
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.cpp
rename to src/gpu/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.cpp
diff --git a/gpu/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h b/src/gpu/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h
rename to src/gpu/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h
diff --git a/gpu/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/package.include b/src/gpu/GridGenerator/grid/GridStrategy/GridGpuStrategy/package.include
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/package.include
rename to src/gpu/GridGenerator/grid/GridStrategy/GridGpuStrategy/package.include
diff --git a/gpu/src/GridGenerator/grid/GridStrategy/GridStrategy.h b/src/gpu/GridGenerator/grid/GridStrategy/GridStrategy.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridStrategy/GridStrategy.h
rename to src/gpu/GridGenerator/grid/GridStrategy/GridStrategy.h
diff --git a/gpu/src/GridGenerator/grid/GridStrategy/package.include b/src/gpu/GridGenerator/grid/GridStrategy/package.include
similarity index 100%
rename from gpu/src/GridGenerator/grid/GridStrategy/package.include
rename to src/gpu/GridGenerator/grid/GridStrategy/package.include
diff --git a/gpu/src/GridGenerator/grid/NodeValues.h b/src/gpu/GridGenerator/grid/NodeValues.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/NodeValues.h
rename to src/gpu/GridGenerator/grid/NodeValues.h
diff --git a/gpu/src/GridGenerator/grid/distributions/D3Q13.h b/src/gpu/GridGenerator/grid/distributions/D3Q13.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/distributions/D3Q13.h
rename to src/gpu/GridGenerator/grid/distributions/D3Q13.h
diff --git a/gpu/src/GridGenerator/grid/distributions/D3Q19.h b/src/gpu/GridGenerator/grid/distributions/D3Q19.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/distributions/D3Q19.h
rename to src/gpu/GridGenerator/grid/distributions/D3Q19.h
diff --git a/gpu/src/GridGenerator/grid/distributions/D3Q27.h b/src/gpu/GridGenerator/grid/distributions/D3Q27.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/distributions/D3Q27.h
rename to src/gpu/GridGenerator/grid/distributions/D3Q27.h
diff --git a/gpu/src/GridGenerator/grid/distributions/D3Q7.h b/src/gpu/GridGenerator/grid/distributions/D3Q7.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/distributions/D3Q7.h
rename to src/gpu/GridGenerator/grid/distributions/D3Q7.h
diff --git a/gpu/src/GridGenerator/grid/distributions/Distribution.cpp b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
similarity index 100%
rename from gpu/src/GridGenerator/grid/distributions/Distribution.cpp
rename to src/gpu/GridGenerator/grid/distributions/Distribution.cpp
diff --git a/gpu/src/GridGenerator/grid/distributions/Distribution.h b/src/gpu/GridGenerator/grid/distributions/Distribution.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/distributions/Distribution.h
rename to src/gpu/GridGenerator/grid/distributions/Distribution.h
diff --git a/gpu/src/GridGenerator/grid/distributions/package.include b/src/gpu/GridGenerator/grid/distributions/package.include
similarity index 100%
rename from gpu/src/GridGenerator/grid/distributions/package.include
rename to src/gpu/GridGenerator/grid/distributions/package.include
diff --git a/gpu/src/GridGenerator/grid/kernel/package.include b/src/gpu/GridGenerator/grid/kernel/package.include
similarity index 100%
rename from gpu/src/GridGenerator/grid/kernel/package.include
rename to src/gpu/GridGenerator/grid/kernel/package.include
diff --git a/gpu/src/GridGenerator/grid/kernel/runGridKernelGPU.cu b/src/gpu/GridGenerator/grid/kernel/runGridKernelGPU.cu
similarity index 100%
rename from gpu/src/GridGenerator/grid/kernel/runGridKernelGPU.cu
rename to src/gpu/GridGenerator/grid/kernel/runGridKernelGPU.cu
diff --git a/gpu/src/GridGenerator/grid/kernel/runGridKernelGPU.cuh b/src/gpu/GridGenerator/grid/kernel/runGridKernelGPU.cuh
similarity index 100%
rename from gpu/src/GridGenerator/grid/kernel/runGridKernelGPU.cuh
rename to src/gpu/GridGenerator/grid/kernel/runGridKernelGPU.cuh
diff --git a/gpu/src/GridGenerator/grid/package.include b/src/gpu/GridGenerator/grid/package.include
similarity index 100%
rename from gpu/src/GridGenerator/grid/package.include
rename to src/gpu/GridGenerator/grid/package.include
diff --git a/gpu/src/GridGenerator/grid/partition/Partition.cpp b/src/gpu/GridGenerator/grid/partition/Partition.cpp
similarity index 100%
rename from gpu/src/GridGenerator/grid/partition/Partition.cpp
rename to src/gpu/GridGenerator/grid/partition/Partition.cpp
diff --git a/gpu/src/GridGenerator/grid/partition/Partition.h b/src/gpu/GridGenerator/grid/partition/Partition.h
similarity index 100%
rename from gpu/src/GridGenerator/grid/partition/Partition.h
rename to src/gpu/GridGenerator/grid/partition/Partition.h
diff --git a/gpu/src/GridGenerator/grid/partition/package.include b/src/gpu/GridGenerator/grid/partition/package.include
similarity index 100%
rename from gpu/src/GridGenerator/grid/partition/package.include
rename to src/gpu/GridGenerator/grid/partition/package.include
diff --git a/gpu/src/GridGenerator/io/GridVTKWriter/GridVTKWriter.cpp b/src/gpu/GridGenerator/io/GridVTKWriter/GridVTKWriter.cpp
similarity index 100%
rename from gpu/src/GridGenerator/io/GridVTKWriter/GridVTKWriter.cpp
rename to src/gpu/GridGenerator/io/GridVTKWriter/GridVTKWriter.cpp
diff --git a/gpu/src/GridGenerator/io/GridVTKWriter/GridVTKWriter.h b/src/gpu/GridGenerator/io/GridVTKWriter/GridVTKWriter.h
similarity index 100%
rename from gpu/src/GridGenerator/io/GridVTKWriter/GridVTKWriter.h
rename to src/gpu/GridGenerator/io/GridVTKWriter/GridVTKWriter.h
diff --git a/gpu/src/GridGenerator/io/GridVTKWriter/package.include b/src/gpu/GridGenerator/io/GridVTKWriter/package.include
similarity index 100%
rename from gpu/src/GridGenerator/io/GridVTKWriter/package.include
rename to src/gpu/GridGenerator/io/GridVTKWriter/package.include
diff --git a/gpu/src/GridGenerator/io/QLineWriter.cpp b/src/gpu/GridGenerator/io/QLineWriter.cpp
similarity index 100%
rename from gpu/src/GridGenerator/io/QLineWriter.cpp
rename to src/gpu/GridGenerator/io/QLineWriter.cpp
diff --git a/gpu/src/GridGenerator/io/QLineWriter.h b/src/gpu/GridGenerator/io/QLineWriter.h
similarity index 100%
rename from gpu/src/GridGenerator/io/QLineWriter.h
rename to src/gpu/GridGenerator/io/QLineWriter.h
diff --git a/gpu/src/GridGenerator/io/STLReaderWriter/STLReader.cpp b/src/gpu/GridGenerator/io/STLReaderWriter/STLReader.cpp
similarity index 100%
rename from gpu/src/GridGenerator/io/STLReaderWriter/STLReader.cpp
rename to src/gpu/GridGenerator/io/STLReaderWriter/STLReader.cpp
diff --git a/gpu/src/GridGenerator/io/STLReaderWriter/STLReader.h b/src/gpu/GridGenerator/io/STLReaderWriter/STLReader.h
similarity index 100%
rename from gpu/src/GridGenerator/io/STLReaderWriter/STLReader.h
rename to src/gpu/GridGenerator/io/STLReaderWriter/STLReader.h
diff --git a/gpu/src/GridGenerator/io/STLReaderWriter/STLWriter.cpp b/src/gpu/GridGenerator/io/STLReaderWriter/STLWriter.cpp
similarity index 100%
rename from gpu/src/GridGenerator/io/STLReaderWriter/STLWriter.cpp
rename to src/gpu/GridGenerator/io/STLReaderWriter/STLWriter.cpp
diff --git a/gpu/src/GridGenerator/io/STLReaderWriter/STLWriter.h b/src/gpu/GridGenerator/io/STLReaderWriter/STLWriter.h
similarity index 100%
rename from gpu/src/GridGenerator/io/STLReaderWriter/STLWriter.h
rename to src/gpu/GridGenerator/io/STLReaderWriter/STLWriter.h
diff --git a/gpu/src/GridGenerator/io/STLReaderWriter/package.include b/src/gpu/GridGenerator/io/STLReaderWriter/package.include
similarity index 100%
rename from gpu/src/GridGenerator/io/STLReaderWriter/package.include
rename to src/gpu/GridGenerator/io/STLReaderWriter/package.include
diff --git a/gpu/src/GridGenerator/io/SimulationFileWriter/SimulationFileNames.cpp b/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileNames.cpp
similarity index 100%
rename from gpu/src/GridGenerator/io/SimulationFileWriter/SimulationFileNames.cpp
rename to src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileNames.cpp
diff --git a/gpu/src/GridGenerator/io/SimulationFileWriter/SimulationFileNames.h b/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileNames.h
similarity index 100%
rename from gpu/src/GridGenerator/io/SimulationFileWriter/SimulationFileNames.h
rename to src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileNames.h
diff --git a/gpu/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp b/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp
similarity index 100%
rename from gpu/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp
rename to src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp
diff --git a/gpu/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h b/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h
similarity index 100%
rename from gpu/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h
rename to src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h
diff --git a/gpu/src/GridGenerator/io/SimulationFileWriter/package.include b/src/gpu/GridGenerator/io/SimulationFileWriter/package.include
similarity index 100%
rename from gpu/src/GridGenerator/io/SimulationFileWriter/package.include
rename to src/gpu/GridGenerator/io/SimulationFileWriter/package.include
diff --git a/gpu/src/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.cpp b/src/gpu/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.cpp
similarity index 100%
rename from gpu/src/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.cpp
rename to src/gpu/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.cpp
diff --git a/gpu/src/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.h b/src/gpu/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.h
similarity index 100%
rename from gpu/src/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.h
rename to src/gpu/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.h
diff --git a/gpu/src/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.cpp b/src/gpu/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.cpp
similarity index 100%
rename from gpu/src/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.cpp
rename to src/gpu/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.cpp
diff --git a/gpu/src/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.h b/src/gpu/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.h
similarity index 100%
rename from gpu/src/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.h
rename to src/gpu/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.h
diff --git a/gpu/src/GridGenerator/io/VTKWriterWrapper/package.include b/src/gpu/GridGenerator/io/VTKWriterWrapper/package.include
similarity index 100%
rename from gpu/src/GridGenerator/io/VTKWriterWrapper/package.include
rename to src/gpu/GridGenerator/io/VTKWriterWrapper/package.include
diff --git a/gpu/src/GridGenerator/io/package.include b/src/gpu/GridGenerator/io/package.include
similarity index 100%
rename from gpu/src/GridGenerator/io/package.include
rename to src/gpu/GridGenerator/io/package.include
diff --git a/gpu/src/GridGenerator/package.include b/src/gpu/GridGenerator/package.include
similarity index 100%
rename from gpu/src/GridGenerator/package.include
rename to src/gpu/GridGenerator/package.include
diff --git a/gpu/src/GridGenerator/utilities/communication.h b/src/gpu/GridGenerator/utilities/communication.h
similarity index 100%
rename from gpu/src/GridGenerator/utilities/communication.h
rename to src/gpu/GridGenerator/utilities/communication.h
diff --git a/gpu/src/GridGenerator/utilities/cuda/CudaErrorCheck.cu b/src/gpu/GridGenerator/utilities/cuda/CudaErrorCheck.cu
similarity index 100%
rename from gpu/src/GridGenerator/utilities/cuda/CudaErrorCheck.cu
rename to src/gpu/GridGenerator/utilities/cuda/CudaErrorCheck.cu
diff --git a/gpu/src/GridGenerator/utilities/cuda/LaunchParameter.cu b/src/gpu/GridGenerator/utilities/cuda/LaunchParameter.cu
similarity index 100%
rename from gpu/src/GridGenerator/utilities/cuda/LaunchParameter.cu
rename to src/gpu/GridGenerator/utilities/cuda/LaunchParameter.cu
diff --git a/gpu/src/GridGenerator/utilities/cuda/LaunchParameter.cuh b/src/gpu/GridGenerator/utilities/cuda/LaunchParameter.cuh
similarity index 100%
rename from gpu/src/GridGenerator/utilities/cuda/LaunchParameter.cuh
rename to src/gpu/GridGenerator/utilities/cuda/LaunchParameter.cuh
diff --git a/gpu/src/GridGenerator/utilities/cuda/cudaDefines.h b/src/gpu/GridGenerator/utilities/cuda/cudaDefines.h
similarity index 100%
rename from gpu/src/GridGenerator/utilities/cuda/cudaDefines.h
rename to src/gpu/GridGenerator/utilities/cuda/cudaDefines.h
diff --git a/gpu/src/GridGenerator/utilities/cuda/cudaKernelCall.h b/src/gpu/GridGenerator/utilities/cuda/cudaKernelCall.h
similarity index 100%
rename from gpu/src/GridGenerator/utilities/cuda/cudaKernelCall.h
rename to src/gpu/GridGenerator/utilities/cuda/cudaKernelCall.h
diff --git a/gpu/src/GridGenerator/utilities/cuda/package.include b/src/gpu/GridGenerator/utilities/cuda/package.include
similarity index 100%
rename from gpu/src/GridGenerator/utilities/cuda/package.include
rename to src/gpu/GridGenerator/utilities/cuda/package.include
diff --git a/gpu/src/GridGenerator/utilities/math/Math.cu b/src/gpu/GridGenerator/utilities/math/Math.cu
similarity index 100%
rename from gpu/src/GridGenerator/utilities/math/Math.cu
rename to src/gpu/GridGenerator/utilities/math/Math.cu
diff --git a/gpu/src/GridGenerator/utilities/math/Math.h b/src/gpu/GridGenerator/utilities/math/Math.h
similarity index 100%
rename from gpu/src/GridGenerator/utilities/math/Math.h
rename to src/gpu/GridGenerator/utilities/math/Math.h
diff --git a/gpu/src/GridGenerator/utilities/math/package.include b/src/gpu/GridGenerator/utilities/math/package.include
similarity index 100%
rename from gpu/src/GridGenerator/utilities/math/package.include
rename to src/gpu/GridGenerator/utilities/math/package.include
diff --git a/gpu/src/GridGenerator/utilities/package.include b/src/gpu/GridGenerator/utilities/package.include
similarity index 100%
rename from gpu/src/GridGenerator/utilities/package.include
rename to src/gpu/GridGenerator/utilities/package.include
diff --git a/gpu/src/GridGenerator/utilities/transformator/ArrowTransformator.cpp b/src/gpu/GridGenerator/utilities/transformator/ArrowTransformator.cpp
similarity index 100%
rename from gpu/src/GridGenerator/utilities/transformator/ArrowTransformator.cpp
rename to src/gpu/GridGenerator/utilities/transformator/ArrowTransformator.cpp
diff --git a/gpu/src/GridGenerator/utilities/transformator/ArrowTransformator.h b/src/gpu/GridGenerator/utilities/transformator/ArrowTransformator.h
similarity index 100%
rename from gpu/src/GridGenerator/utilities/transformator/ArrowTransformator.h
rename to src/gpu/GridGenerator/utilities/transformator/ArrowTransformator.h
diff --git a/gpu/src/GridGenerator/utilities/transformator/Transformator.cpp b/src/gpu/GridGenerator/utilities/transformator/Transformator.cpp
similarity index 100%
rename from gpu/src/GridGenerator/utilities/transformator/Transformator.cpp
rename to src/gpu/GridGenerator/utilities/transformator/Transformator.cpp
diff --git a/gpu/src/GridGenerator/utilities/transformator/Transformator.h b/src/gpu/GridGenerator/utilities/transformator/Transformator.h
similarity index 100%
rename from gpu/src/GridGenerator/utilities/transformator/Transformator.h
rename to src/gpu/GridGenerator/utilities/transformator/Transformator.h
diff --git a/gpu/src/GridGenerator/utilities/transformator/TransformatorImp.cpp b/src/gpu/GridGenerator/utilities/transformator/TransformatorImp.cpp
similarity index 100%
rename from gpu/src/GridGenerator/utilities/transformator/TransformatorImp.cpp
rename to src/gpu/GridGenerator/utilities/transformator/TransformatorImp.cpp
diff --git a/gpu/src/GridGenerator/utilities/transformator/TransformatorImp.h b/src/gpu/GridGenerator/utilities/transformator/TransformatorImp.h
similarity index 100%
rename from gpu/src/GridGenerator/utilities/transformator/TransformatorImp.h
rename to src/gpu/GridGenerator/utilities/transformator/TransformatorImp.h
diff --git a/gpu/src/GridGenerator/utilities/transformator/package.include b/src/gpu/GridGenerator/utilities/transformator/package.include
similarity index 100%
rename from gpu/src/GridGenerator/utilities/transformator/package.include
rename to src/gpu/GridGenerator/utilities/transformator/package.include
-- 
GitLab