From dc5cff102e145930458d4fbb213272eee1897146 Mon Sep 17 00:00:00 2001
From: Soeren Peters <peters@irmb.tu-bs.de>
Date: Fri, 12 Jan 2018 17:01:54 +0100
Subject: [PATCH] - remove GridBuilder classes -> move functionality to
 GridBuilderImp

---
 .../grid/GridBuilder/GridBuilder.h            |  7 +++-
 .../grid/GridBuilder/GridBuilderImp.cpp       | 34 ++++++++++-----
 .../grid/GridBuilder/GridBuilderImp.h         |  8 ++--
 .../GridCpuBuilder/GridCpuBuilder.cpp         | 25 -----------
 .../GridCpuBuilder/GridCpuBuilder.h           | 26 ------------
 .../GridCpuBuilder/package.include            |  0
 .../GridGpuBuilder/GridGpuBuilder.cpp         | 25 -----------
 .../GridGpuBuilder/GridGpuBuilder.h           | 26 ------------
 .../GridGpuBuilder/package.include            |  0
 .../GridWrapperCPU/GridWrapperCPU.cpp         |  3 +-
 .../SimulationFileWriter.cpp                  |  2 +-
 .../utilities/cuda/cudaDefines.h              |  1 +
 targets/apps/HULC/main.cpp                    | 41 +++++++++++++++++--
 13 files changed, 76 insertions(+), 122 deletions(-)
 delete mode 100644 src/GridGenerator/grid/GridBuilder/GridCpuBuilder/GridCpuBuilder.cpp
 delete mode 100644 src/GridGenerator/grid/GridBuilder/GridCpuBuilder/GridCpuBuilder.h
 delete mode 100644 src/GridGenerator/grid/GridBuilder/GridCpuBuilder/package.include
 delete mode 100644 src/GridGenerator/grid/GridBuilder/GridGpuBuilder/GridGpuBuilder.cpp
 delete mode 100644 src/GridGenerator/grid/GridBuilder/GridGpuBuilder/GridGpuBuilder.h
 delete mode 100644 src/GridGenerator/grid/GridBuilder/GridGpuBuilder/package.include

diff --git a/src/GridGenerator/grid/GridBuilder/GridBuilder.h b/src/GridGenerator/grid/GridBuilder/GridBuilder.h
index e3b791861..b44f5f5fd 100644
--- a/src/GridGenerator/grid/GridBuilder/GridBuilder.h
+++ b/src/GridGenerator/grid/GridBuilder/GridBuilder.h
@@ -32,6 +32,11 @@ class BoundingBox;
 class GridBuilder
 {
 public:
+    enum class GenerationDevice
+    {
+        CPU, GPU
+    };
+
     virtual VF_PUBLIC ~GridBuilder() {};
 
     virtual void addGrid(real length, real width, real high, real delta, std::string distribution, std::shared_ptr<Transformator> trans) = 0;
@@ -45,7 +50,7 @@ public:
     virtual void writeArrows(std::string fileName, std::shared_ptr<ArrowTransformator> trans) const = 0;
 
 
-	virtual std::shared_ptr<GridWrapper> getKernel(int level, int box) = 0;
+	virtual std::shared_ptr<GridWrapper> getGridWrapper(int level, int box) = 0;
 
     virtual void createBoundaryConditions() = 0;
 
diff --git a/src/GridGenerator/grid/GridBuilder/GridBuilderImp.cpp b/src/GridGenerator/grid/GridBuilder/GridBuilderImp.cpp
index b12ad6432..656b1d3a4 100644
--- a/src/GridGenerator/grid/GridBuilder/GridBuilderImp.cpp
+++ b/src/GridGenerator/grid/GridBuilder/GridBuilderImp.cpp
@@ -55,7 +55,8 @@ void deserialize(GeometryMemento &memento, const std::string &filename)
 #define GEOFLUID 19
 #define GEOSOLID 16
 
-GridBuilderImp::GridBuilderImp()
+
+GridBuilderImp::GridBuilderImp(GenerationDevice device) : device(device)
 {
     this->Qs.resize(QFILES);
     this->channelBoundaryConditions.resize(6);
@@ -67,13 +68,6 @@ GridBuilderImp::GridBuilderImp()
     channelBoundaryConditions[5] = "periodic";
 }
 
-std::shared_ptr<GridBuilder> GridBuilderImp::make(std::string type)
-{
-    if (type == "cpu")
-        return std::shared_ptr<GridBuilder>(new GridCpuBuilder());
-    else
-        return std::shared_ptr<GridBuilder>(new GridGpuBuilder());
-}
 
 GridBuilderImp::~GridBuilderImp()
 {
@@ -191,7 +185,7 @@ void GridBuilderImp::writeSimulationFiles(std::string output, BoundingBox<int> &
     //SimulationFileWriter::writeSimulationFiles(output, coords, qs, writeFilesBinary, this->gridKernels[level]->grid, this->transformators[level]);
 }
 
-std::shared_ptr<GridWrapper> GridBuilderImp::getKernel(int level, int box)
+std::shared_ptr<GridWrapper> GridBuilderImp::getGridWrapper(int level, int box)
 {
     return this->gridKernels[level][box];
 }
@@ -221,6 +215,26 @@ void GridBuilderImp::addGrid(real length, real width, real high, real delta, std
     this->createGridKernels(distribution);
 }
 
+void GridBuilderImp::createGridKernels(std::string distribution)
+{
+    for (int i = 0; i < rankTasks.size(); i += 2)
+    {
+        int level = rankTasks[i];
+        int index = rankTasks[i + 1];
+
+        switch (this->device)
+        {
+        case GenerationDevice::CPU:
+            this->gridKernels[level][index] = std::shared_ptr<GridWrapperCPU>(new GridWrapperCPU(this->boxes[level][index], distribution));
+            break;
+        case GenerationDevice::GPU:
+            this->gridKernels[level][index] = std::shared_ptr<GridWrapperGPU>(new GridWrapperGPU(this->boxes[level][index], distribution));
+            break;
+        }
+    }
+}
+
+
 void GridBuilderImp::setNumberOfNodes(real length, real width, real high, real delta)
 {
     int nx = (int)(length / delta);
@@ -354,7 +368,7 @@ void GridBuilderImp::getNodeValues(real *xCoords, real *yCoords, real *zCoords,
         neighborX[i + 1] = (unsigned int)(grid.neighborIndexX[grid.matrixIndex[i]] + 1);
         neighborY[i + 1] = (unsigned int)(grid.neighborIndexY[grid.matrixIndex[i]] + 1);
         neighborZ[i + 1] = (unsigned int)(grid.neighborIndexZ[grid.matrixIndex[i]] + 1);
-        geo[i + 1] = (unsigned int)grid.field[grid.matrixIndex[i]] == SOLID ? GEOSOLID : GEOFLUID;
+        geo[i + 1] = (unsigned int)grid.isSolid(grid.matrixIndex[i]) ? GEOSOLID : GEOFLUID;
     }
 }
 
diff --git a/src/GridGenerator/grid/GridBuilder/GridBuilderImp.h b/src/GridGenerator/grid/GridBuilder/GridBuilderImp.h
index 1a41f211e..39b9d0890 100644
--- a/src/GridGenerator/grid/GridBuilder/GridBuilderImp.h
+++ b/src/GridGenerator/grid/GridBuilder/GridBuilderImp.h
@@ -23,6 +23,8 @@ class BoundingBox;
 class GridBuilderImp : public GridBuilder
 {
 public:
+
+    VF_PUBLIC GridBuilderImp(GenerationDevice device);
     VF_PUBLIC static std::shared_ptr<GridBuilder> make(std::string);
 
     VF_PUBLIC virtual ~GridBuilderImp();
@@ -37,7 +39,7 @@ public:
 	VF_PUBLIC virtual void writeGridToVTK(std::string output, int level);
 	VF_PUBLIC virtual void writeSimulationFiles(std::string output, BoundingBox<int> &nodesDelete, bool writeFilesBinary, int level);
 
-	VF_PUBLIC virtual std::shared_ptr<GridWrapper> getKernel(int level, int box);
+	VF_PUBLIC virtual std::shared_ptr<GridWrapper> getGridWrapper(int level, int box);
 
     VF_PUBLIC virtual void createBoundaryConditions();
 
@@ -58,7 +60,7 @@ public:
     VF_PUBLIC void writeArrows(std::string fileName, std::shared_ptr<ArrowTransformator> trans) const;
 
 protected:
-    GridBuilderImp();
+    GenerationDevice device;
 
     std::vector<std::vector<std::shared_ptr<GridWrapper> > >gridKernels;
     std::vector<std::shared_ptr<Transformator>> transformators;
@@ -73,7 +75,7 @@ protected:
     void checkLevel(int level);
 
 protected:
-    virtual void createGridKernels(std::string distribution) = 0;
+    virtual void createGridKernels(std::string distribution);
 
     void setNumberOfNodes(real length, real width, real high, real delta);
     void printMasterInformation(int nx, int ny, int nz);
diff --git a/src/GridGenerator/grid/GridBuilder/GridCpuBuilder/GridCpuBuilder.cpp b/src/GridGenerator/grid/GridBuilder/GridCpuBuilder/GridCpuBuilder.cpp
deleted file mode 100644
index d1fc909a7..000000000
--- a/src/GridGenerator/grid/GridBuilder/GridCpuBuilder/GridCpuBuilder.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "GridCpuBuilder.h"
-
-#include <GridGenerator/grid/GridWrapper/GridWrapperCPU/GridWrapperCPU.h>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
-
-
-GridCpuBuilder::GridCpuBuilder() : GridBuilderImp()
-{
-
-}
-
-GridCpuBuilder::~GridCpuBuilder()
-{
-
-}
-
-void GridCpuBuilder::createGridKernels(std::string distribution)
-{
-    for (int i = 0; i < rankTasks.size(); i += 2)
-    {
-        int level = rankTasks[i];
-        int index = rankTasks[i + 1];
-        this->gridKernels[level][index] = std::shared_ptr<GridWrapperCPU>(new GridWrapperCPU(this->boxes[level][index], distribution));
-    }
-}
diff --git a/src/GridGenerator/grid/GridBuilder/GridCpuBuilder/GridCpuBuilder.h b/src/GridGenerator/grid/GridBuilder/GridCpuBuilder/GridCpuBuilder.h
deleted file mode 100644
index 50203966e..000000000
--- a/src/GridGenerator/grid/GridBuilder/GridCpuBuilder/GridCpuBuilder.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef GridCpuBuilder_H
-#define GridCpuBuilder_H
-
-#include "GridGenerator/global.h"
-
-
-#include <vector>
-#include <string>
-#include <memory>
-
-#include "../GridBuilderImp.h"
-
-
-class GridCpuBuilder : public GridBuilderImp
-{
-public:
-    VF_PUBLIC GridCpuBuilder();
-    virtual VF_PUBLIC ~GridCpuBuilder();
-
-protected:
-    void createGridKernels(std::string distribution);
-
-};
-
-#endif
-
diff --git a/src/GridGenerator/grid/GridBuilder/GridCpuBuilder/package.include b/src/GridGenerator/grid/GridBuilder/GridCpuBuilder/package.include
deleted file mode 100644
index e69de29bb..000000000
diff --git a/src/GridGenerator/grid/GridBuilder/GridGpuBuilder/GridGpuBuilder.cpp b/src/GridGenerator/grid/GridBuilder/GridGpuBuilder/GridGpuBuilder.cpp
deleted file mode 100644
index f267cdadc..000000000
--- a/src/GridGenerator/grid/GridBuilder/GridGpuBuilder/GridGpuBuilder.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "GridGpuBuilder.h"
-
-#include <GridGenerator/grid/GridWrapper/GridWrapperGPU/GridWrapperGPU.h>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
-
-
-GridGpuBuilder::GridGpuBuilder() : GridBuilderImp()
-{
-
-}
-
-GridGpuBuilder::~GridGpuBuilder()
-{
-
-}
-
-void GridGpuBuilder::createGridKernels(std::string distribution)
-{
-    for (int i = 0; i < rankTasks.size(); i += 2)
-    {
-        int level = rankTasks[i];
-        int index = rankTasks[i + 1];
-        this->gridKernels[level][index] = std::shared_ptr<GridWrapperGPU>(new GridWrapperGPU(this->boxes[level][index], distribution));
-    }
-}
diff --git a/src/GridGenerator/grid/GridBuilder/GridGpuBuilder/GridGpuBuilder.h b/src/GridGenerator/grid/GridBuilder/GridGpuBuilder/GridGpuBuilder.h
deleted file mode 100644
index 5e6935d9a..000000000
--- a/src/GridGenerator/grid/GridBuilder/GridGpuBuilder/GridGpuBuilder.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef GridGpuBuilder_H
-#define GridGpuBuilder_H
-
-#include "GridGenerator/global.h"
-
-
-#include <vector>
-#include <string>
-#include <memory>
-
-#include "../GridBuilderImp.h"
-
-
-class GridGpuBuilder : public GridBuilderImp
-{
-public:
-	VF_PUBLIC GridGpuBuilder();
-	virtual VF_PUBLIC ~GridGpuBuilder();
-
-protected:
-    void createGridKernels(std::string distribution);
-
-};
-
-#endif
-
diff --git a/src/GridGenerator/grid/GridBuilder/GridGpuBuilder/package.include b/src/GridGenerator/grid/GridBuilder/GridGpuBuilder/package.include
deleted file mode 100644
index e69de29bb..000000000
diff --git a/src/GridGenerator/grid/GridWrapper/GridWrapperCPU/GridWrapperCPU.cpp b/src/GridGenerator/grid/GridWrapper/GridWrapperCPU/GridWrapperCPU.cpp
index b9de5d408..169742320 100644
--- a/src/GridGenerator/grid/GridWrapper/GridWrapperCPU/GridWrapperCPU.cpp
+++ b/src/GridGenerator/grid/GridWrapper/GridWrapperCPU/GridWrapperCPU.cpp
@@ -165,9 +165,8 @@ void GridWrapperCPU::findInvalidNodes()
     }
 }
 
-
 void GridWrapperCPU::findNeighborIndices()
 {
     for (int index = 0; index < grid.reducedSize; index++) 
         grid.findNeighborIndex(index);
-}
\ No newline at end of file
+}
diff --git a/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp b/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp
index c6d5e516d..e0661f340 100644
--- a/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp
+++ b/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp
@@ -121,7 +121,7 @@ void SimulationFileWriter::writeLevelAndLevelSize(int sizeCoords, std::vector<st
 
 void SimulationFileWriter::writeCoordsNeighborsGeo(const int& i, bool binaer, std::shared_ptr<GridBuilder> builder, std::shared_ptr<Transformator> trans)
 {
-    Grid grid = builder->getKernel(0, 0)->grid;
+    Grid grid = builder->getGridWrapper(0, 0)->grid;
     int index = grid.matrixIndex[i];
 
     int type = grid.field[index] == SOLID ? 16 : 1;
diff --git a/src/GridGenerator/utilities/cuda/cudaDefines.h b/src/GridGenerator/utilities/cuda/cudaDefines.h
index 25b6c558e..ccfe3de5e 100644
--- a/src/GridGenerator/utilities/cuda/cudaDefines.h
+++ b/src/GridGenerator/utilities/cuda/cudaDefines.h
@@ -9,6 +9,7 @@
 #define GLOBAL __global__
 #define CONSTANT __constant__
 
+
 #define HOSTDEVICE HOST DEVICE
 
 
diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp
index ea192e2b9..1cc69ebee 100644
--- a/targets/apps/HULC/main.cpp
+++ b/targets/apps/HULC/main.cpp
@@ -20,6 +20,7 @@
 #include "io/GridVTKWriter/GridVTKWriter.h"
 #include "grid/GridWrapper/GridWrapper.h"
 #include "io/SimulationFileWriter/SimulationFileWriter.h"
+#include "VirtualFluidsBasics/numerics/geometry3d/GbCuboid3D.h"
 
 
 std::string getGridPath(std::shared_ptr<Parameter> para, std::string Gridpath)
@@ -223,11 +224,40 @@ void setParameters(std::shared_ptr<Parameter> para, std::unique_ptr<input::Input
     para->setNeedInterface(std::vector<bool>{true, true, true, true, true, true});
 }
 
+
+
+void multipleLevel(const std::string& configPath)
+{
+
+    SPtr<GbCuboid3D> level0(new GbCuboid3D(0.0, 0.0, 0.0, 64.0, 12.0, 96.0));
+    SPtr<GbCuboid3D> level1(new GbCuboid3D(20.0, 4.0, 40.0, 40.0, 8.0, 60.0));
+
+    SPtr<GridBuilder> builder(new GridBuilderImp(GridBuilder::CPU));
+    builder->addGrid(level0, "D3Q27");
+    builder->addGrid(level1, "D3Q27");
+
+
+    SPtr<Parameter> para = Parameter::make();
+    SPtr<GridProvider> gridGenerator = GridProvider::makeGridGenerator(builder, para);
+
+    std::ifstream stream;
+    stream.open(configPath.c_str(), std::ios::in);
+    if (stream.fail())
+        throw "can not open config file!\n";
+
+    UPtr<input::Input> input = input::Input::makeInput(stream, "config");
+
+    setParameters(para, input);
+
+    Simulation sim;
+    sim.init(para, gridGenerator);
+    sim.run();
+}
+
 void simulate(const std::string& configPath)
 {
     SPtr<GridBuilder> builder = GridBuilderImp::make("gpu");
 
-
     SPtr<Parameter> para = Parameter::make();
     SPtr<GridProvider> gridGenerator = GridProvider::makeGridGenerator(builder, para);
     //std::shared_ptr<GridProvider> reader = GridProvider::makeGridReader(true, para);
@@ -243,9 +273,14 @@ void simulate(const std::string& configPath)
 
     SPtr<Transformator> trans(new TransformatorImp());
     builder->addGrid(para->getGridX()[0], para->getGridY()[0], para->getGridZ()[0], 1.0, "D3Q27", trans);
-    builder->getKernel(0, 0)->copyDataFromGPU();
 
-    GridVTKWriter::writeSparseGridToVTK(builder->getKernel(0, 0)->grid, "D:/GRIDGENERATION/couplingVF/periodicTaylor/testFile", trans);
+    SPtr<Transformator> transRefine1(new TransformatorImp(para->getDistX()[1], para->getDistY()[1], para->getDistZ()[1], 0.5));
+    builder->addGrid(para->getGridX()[1], para->getGridY()[1], para->getGridZ()[1], 1.0, "D3Q27", transRefine1);
+
+    builder->getGridWrapper(0, 0)->copyDataFromGPU();
+    builder->getGridWrapper(1, 0)->copyDataFromGPU();
+
+    GridVTKWriter::writeSparseGridToVTK(builder->getGridWrapper(0, 0)->grid, "D:/GRIDGENERATION/couplingVF/periodicTaylor/testFile", trans);
     SimulationFileWriter::writeSimulationFiles("D:/GRIDGENERATION/couplingVF/periodicTaylor/simuFiles/", builder, false, trans);
 
     Simulation sim;
-- 
GitLab