diff --git a/src/GridGenerator/geometries/BoundingBox/BoundingBox.cu b/src/GridGenerator/geometries/BoundingBox/BoundingBox.cu
index 7c92d04c458e601324292d881b410a38bb5a00e8..258724ce77f166551e4fe8be8075622f19fa1de8 100644
--- a/src/GridGenerator/geometries/BoundingBox/BoundingBox.cu
+++ b/src/GridGenerator/geometries/BoundingBox/BoundingBox.cu
@@ -1,6 +1,6 @@
-#include "BoundingBox.cuh"
+#include "BoundingBox.h"
 
-#include "../Triangle/Triangle.cuh"
+#include "../Triangle/Triangle.h"
 #include "../Vertex/Vertex.cuh"
 #include <GridGenerator/utilities/math/CudaMath.cuh>
 
@@ -55,20 +55,52 @@ template <typename T>
  }
 
 
- HOSTDEVICE BoundingBox<real> BoundingBox<real>::makeRealNodeBox(const Triangle& t, const real& delta)
+ HOSTDEVICE BoundingBox<real> BoundingBox<real>::makeRealNodeBox(const Triangle& t, const real& startX, const real& startY, const real& startZ, const real& delta)
 {
     BoundingBox<real> box;
 
     real minX, maxX, minY, maxY, minZ, maxZ;
     t.setMinMax(minX, maxX, minY, maxY, minZ, maxZ);
 
-    calculateMinMaxOnNodes(box.minX, box.maxX, minX, maxX, delta);
-    calculateMinMaxOnNodes(box.minY, box.maxY, minY, maxY, delta);
-    calculateMinMaxOnNodes(box.minZ, box.maxZ, minZ, maxZ, delta);
+    calculateMinMaxOnNodes(box.minX, box.maxX, minX, maxX, startX, delta);
+    calculateMinMaxOnNodes(box.minY, box.maxY, minY, maxY, startY, delta);
+    calculateMinMaxOnNodes(box.minZ, box.maxZ, minZ, maxZ, startZ, delta);
 
     return box;
 }
 
+ template <>
+ HOSTDEVICE void BoundingBox<real>::calculateMinMaxOnNodes(real &minNode, real &maxNode, const real &minExact, const real &maxExact, const real& start, const real& delta)
+ {
+    const real decimalStart = CudaMath::getDecimalPart(start);
+    minNode = getMinimum(minExact, decimalStart, delta);
+    maxNode = getMaximum(maxExact, decimalStart, delta);
+ }
+
+ template <>
+ HOSTDEVICE real BoundingBox<real>::getMinimum(const real& minExact, const real& decimalStart, const real& delta)
+ {
+     real minNode = ceil(minExact - 1.0);
+     minNode += decimalStart;
+     while (minNode > minExact)
+         minNode -= delta;
+
+     while (minNode + delta < minExact)
+         minNode += delta;
+     return minNode;
+ }
+
+ template <>
+ HOSTDEVICE real BoundingBox<real>::getMaximum(const real& maxExact, const real& decimalStart, const real& delta)
+ {
+     real maxNode = ceil(maxExact - 1.0);
+     maxNode += decimalStart;
+
+     while (maxNode < maxExact)
+         maxNode += delta;
+     return maxNode;
+ }
+
 
 template <typename T>
  HOST BoundingBox<T> BoundingBox<T>::makeInvalidMinMaxBox()
@@ -82,42 +114,26 @@ template <typename T>
      return box;
  }
 
- HOSTDEVICE BoundingBox<int> BoundingBox<int>::makeNodeBox(const Triangle &t)
- {
-	 BoundingBox<int> box;
 
-     real minX, maxX, minY, maxY, minZ, maxZ;
-     t.setMinMax(minX, maxX, minY, maxY, minZ, maxZ);
-
-	 calculateMinMaxOnNodes(box.minX, box.maxX, minX, maxX);
-	 calculateMinMaxOnNodes(box.minY, box.maxY, minY, maxY);
-	 calculateMinMaxOnNodes(box.minZ, box.maxZ, minZ, maxZ);
-	 return box;
- }
-
- template <>
- HOSTDEVICE void BoundingBox<real>::calculateMinMaxOnNodes(real &minNode, real &maxNode, const real &minExact, const real &maxExact, const real& delta)
- {
-     minNode = ceil(minExact - 1.0);
-     maxNode = floor(maxExact + 1.0);
-     if (minNode + 0.5 < minExact)
-         minNode += 0.5;
 
 
-     if (maxNode - 0.5 > maxExact)
-         maxNode -= 0.5;
- }
-
- template <>
- HOSTDEVICE void BoundingBox<int>::calculateMinMaxOnNodes(int &minNode, int &maxNode, const real &minExact, const real &maxExact)
- {
-     minNode = ceil(minExact - 1.0);
-     maxNode = floor(maxExact + 1.0);
- }
-
  void BoundingBox<real>::setMinMax(const Triangle& t)
  {
+     real minX, maxX, minY, maxY, minZ, maxZ;
      t.setMinMax(minX, maxX, minY, maxY, minZ, maxZ);
+     if(minX < this->minX)
+         this->minX = minX;
+     if (minY < this->minY)
+         this->minY = minY;
+     if (minZ < this->minZ)
+         this->minZ = minZ;
+
+     if (maxX > this->maxX)
+         this->maxX = maxX;
+     if (maxY > this->maxY)
+         this->maxY = maxY;
+     if (maxZ > this->maxZ)
+         this->maxZ = maxZ;
  }
 
  template <typename T>
diff --git a/src/GridGenerator/geometries/BoundingBox/BoundingBox.cuh b/src/GridGenerator/geometries/BoundingBox/BoundingBox.h
similarity index 80%
rename from src/GridGenerator/geometries/BoundingBox/BoundingBox.cuh
rename to src/GridGenerator/geometries/BoundingBox/BoundingBox.h
index 72499a4348a0852c795138605daf0c9c47bf0749..c7ff8f6bd7c013a486537a872e3a94d6de3e0ca3 100644
--- a/src/GridGenerator/geometries/BoundingBox/BoundingBox.cuh
+++ b/src/GridGenerator/geometries/BoundingBox/BoundingBox.h
@@ -30,8 +30,7 @@ public:
 
 public:
     HOST static BoundingBox<real> makeExactBox(const Triangle &t);
-    HOSTDEVICE static BoundingBox<real> makeRealNodeBox(const Triangle &t, const real& delta);
-	HOSTDEVICE static BoundingBox<int> makeNodeBox(const Triangle &t);
+    HOSTDEVICE static BoundingBox<real> makeRealNodeBox(const Triangle &t, const real& startX, const real& startY, const real& startZ, const real& delta);
     HOST static BoundingBox<T> makeInvalidMinMaxBox();
 
     void setMinMax(const Triangle& t);
@@ -51,8 +50,9 @@ public:
     
 
 private:
-    HOSTDEVICE static void calculateMinMaxOnNodes(int &minNode, int &maxNode, const real &minExact, const real &maxExact);
-    HOSTDEVICE static void calculateMinMaxOnNodes(real &minNode, real &maxNode, const real &minExact, const real &maxExact, const real& delta);
+    HOSTDEVICE static void calculateMinMaxOnNodes(real &minNode, real &maxNode, const real &minExact, const real &maxExact, const real& start, const real& delta);
+    HOSTDEVICE static real getMinimum(const real& minExact, const real& decimalStart, const real& delta);
+    HOSTDEVICE static real getMaximum(const real& maxExact, const real& decimalStart, const real& delta);
 
 	bool isInside(const Vertex &v) const;
 	void getPoints(Vertex v[8]) const;
@@ -60,3 +60,4 @@ private:
 };
 
 #endif
+
diff --git a/src/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp b/src/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp
index 0a7b3ab439b7a164dde33788cb06d95ecbbf96d5..15cdf759155bdac375fdbb5c5c50cffd12f55197 100644
--- a/src/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp
+++ b/src/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp
@@ -1,80 +1,46 @@
 #include "gmock/gmock.h"
 
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
+#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 #include <GridGenerator/geometries/Vertex/Vertex.cuh>
 
 
 using namespace testing;
 
 
-TEST(BoundingBoxTest, initWithTriangle_whenTheValueIsIntegerBoxHasToPLUS_or_MINUS_ONE) 
+TEST(BoundingBoxTest, initBBWithTriangleOnNodes_minimumBorder)
 {
-    real minX = 1.0f;
-    real minY = 23.0f;
-    real minZ = 1.1222f;
-
-    real maxX = 110.0f;
-    real maxY = 50.0f;
-    real maxZ = 12122.23f;
-	BoundingBox<int> box = BoundingBox<int>::makeNodeBox(Triangle(Vertex(maxX, maxY - 10, minZ + 2), Vertex(minX, maxY, maxZ), Vertex(minX + 3, minY, minZ), Vertex(0.0f, 0.0f, 0.0f)));
-    EXPECT_THAT(box.minX, Eq(minX - 1));
-    EXPECT_THAT(box.minY, Eq(minY - 1));
-    EXPECT_THAT(box.minZ, Eq((int)minZ));
-
-    EXPECT_THAT(box.maxX, Eq(maxX + 1));
-    EXPECT_THAT(box.maxY, Eq(maxY + 1));
-    EXPECT_THAT(box.maxZ, Eq((int)maxZ + 1));
+    Vertex v = Vertex(0.1, 0.3, 0.8);
+    Triangle t = Triangle(v, v, v, Vertex(0.0f, 0.0f, 0.0f));
+
+    const real startX = 0.2;
+    const real startY = 0.2;
+    const real startZ = 0.2;
+    const real delta = 0.5;
+    const auto sut =  BoundingBox<real>::makeRealNodeBox(t, startX, startY, startZ, delta);
+
+    EXPECT_THAT(sut.minX, RealEq(-0.3));
+    EXPECT_THAT(sut.minY, RealEq(0.2));
+    EXPECT_THAT(sut.minZ, RealEq(0.7));
 }
 
-TEST(BoundingBoxTest, initWithTriangle2)
-{
-	BoundingBox<int> box = BoundingBox<int>::makeNodeBox(Triangle(Vertex(20.0f, 1.0f, 1.0f), Vertex(1.0f, 1.0f, 1 + 1e-006f), Vertex(20.0f, 20.0f, 1.0f), Vertex(1.0f, 0.0f, 0.0f)));
-
-    EXPECT_THAT(box.minX, Eq(0));
-    EXPECT_THAT(box.minY, Eq(0));
-    EXPECT_THAT(box.minZ, Eq(0));
-
-    EXPECT_THAT(box.maxX, Eq(21));
-    EXPECT_THAT(box.maxY, Eq(21));
-    EXPECT_THAT(box.maxZ, Eq(2));
-}
 
-
-TEST(BoundingBoxTest, initWithTriangle3) 
+TEST(BoundingBoxTest, initBBWithTriangleOnNodes_maximumBorder)
 {
-	BoundingBox<int> box = BoundingBox<int>::makeNodeBox(Triangle(Vertex(20.0f, 20.0f, 20.0f), Vertex(1.0f, 20.0f, 20.0f), Vertex(20.0f, 1.0f, 20.0f), Vertex(1.0f, 0.0f, 0.0f)));
-
-    EXPECT_THAT(box.minX, Eq(0));
-    EXPECT_THAT(box.minY, Eq(0));
-    EXPECT_THAT(box.minZ, Eq(19));
-
-    EXPECT_THAT(box.maxX, Eq(21));
-    EXPECT_THAT(box.maxY, Eq(21));
-    EXPECT_THAT(box.maxZ, Eq(21));
+    Vertex v = Vertex(0.1, 0.3, 0.8);
+    Triangle t = Triangle(v, v, v, Vertex(0.0f, 0.0f, 0.0f));
+
+    const real startX = 0.2;
+    const real startY = 0.2;
+    const real startZ = 0.2;
+    const real delta = 0.5;
+    const auto sut = BoundingBox<real>::makeRealNodeBox(t, startX, startY, startZ, delta);
+
+    EXPECT_THAT(sut.maxX, RealEq(0.2));
+    EXPECT_THAT(sut.maxY, RealEq(0.7));
+    EXPECT_THAT(sut.maxZ, RealEq(1.2));
 }
 
-TEST(BoundingBoxTest, whenAllValueAreFloat_BoxHasToCEIL_OR_FLOOR) 
-{
-    real minX = 1.5f;
-    real minY = 23.2f;
-    real minZ = 1.1222f;
-
-    real maxX = 110.4f;
-    real maxY = 50.5f;
-    real maxZ = 12122.23f;
-
-	BoundingBox<int> box = BoundingBox<int>::makeNodeBox(Triangle(Vertex(maxX, maxY - 10, minZ + 2), Vertex(minX, maxY, maxZ), Vertex(minX + 3, minY, minZ), Vertex(0.0f, 0.0f, 0.0f)));
-
-    EXPECT_THAT(box.minX, Eq((int)minX));
-    EXPECT_THAT(box.minY, Eq((int)minY));
-    EXPECT_THAT(box.minZ, Eq((int)minZ));
-
-    EXPECT_THAT(box.maxX, Eq((int)maxX + 1));
-    EXPECT_THAT(box.maxY, Eq((int)maxY + 1));
-    EXPECT_THAT(box.maxZ, Eq((int)maxZ + 1));
-
-}
 
 TEST(BoundingBoxExactTest, findMinMaxFromTriangle)
 {
@@ -134,19 +100,4 @@ TEST(BoundingBoxTest, isInside_false)
     EXPECT_FALSE(box.isInside(t));
 }
 
-TEST(BoundingBoxTest, createNodeBoxWithFloastingPointValues)
-{
-    Triangle t = Triangle(Vertex(1.34, -2.01, 1.8), Vertex(2, 2, 1.9), Vertex(3.99, 2.1, 1.51), Vertex(0.0, 0.0, 0.0));
-    real delta = 0.5;
-
-    BoundingBox<real> box = BoundingBox<real>::makeRealNodeBox(t, delta);
-
-    EXPECT_THAT(box.minX, RealEq(1.0));
-    EXPECT_THAT(box.minY, RealEq(-2.5));
-    EXPECT_THAT(box.minZ, RealEq(1.5));
-
-    EXPECT_THAT(box.maxX, RealEq(4));
-    EXPECT_THAT(box.maxY, RealEq(2.5));
-    EXPECT_THAT(box.maxZ, RealEq(2.0));
-}
 
diff --git a/src/GridGenerator/geometries/BoundingBox/Serialization/BoundingBoxMementoTest.cpp b/src/GridGenerator/geometries/BoundingBox/Serialization/BoundingBoxMementoTest.cpp
index 17382037899b6e4bc6d8723d768222477592dac5..9173d4977165f474001395dea144e887851a9ab1 100644
--- a/src/GridGenerator/geometries/BoundingBox/Serialization/BoundingBoxMementoTest.cpp
+++ b/src/GridGenerator/geometries/BoundingBox/Serialization/BoundingBoxMementoTest.cpp
@@ -4,7 +4,7 @@
 #include <fstream>
 
 #include <GridGenerator/geometries/BoundingBox/Serialization/BoundingBoxMemento.h>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 
 #include <boost/archive/text_iarchive.hpp>
 #include <boost/archive/text_oarchive.hpp>
diff --git a/src/GridGenerator/geometries/Triangle/Serialization/TriangleMementoTest.cpp b/src/GridGenerator/geometries/Triangle/Serialization/TriangleMementoTest.cpp
index 8593a5f94d2af6c0b15d50f225b902f5637ea1c7..1c8722b9f34d7af1fff9bab64b474fed59aa6375 100644
--- a/src/GridGenerator/geometries/Triangle/Serialization/TriangleMementoTest.cpp
+++ b/src/GridGenerator/geometries/Triangle/Serialization/TriangleMementoTest.cpp
@@ -4,7 +4,7 @@
 #include <fstream>
 
 #include <GridGenerator/geometries/Triangle/Serialization/TriangleMemento.h>
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
 
 #include <boost/archive/text_iarchive.hpp>
 #include <boost/archive/text_oarchive.hpp>
diff --git a/src/GridGenerator/geometries/Triangle/Triangle.cu b/src/GridGenerator/geometries/Triangle/Triangle.cu
index e1823d637dd208104149276bc849f0e501a99244..6dc85d29542922a79738c1807b265d87d1024675 100644
--- a/src/GridGenerator/geometries/Triangle/Triangle.cu
+++ b/src/GridGenerator/geometries/Triangle/Triangle.cu
@@ -1,9 +1,11 @@
-#include "Triangle.cuh"
+#include "Triangle.h"
 #include <GridGenerator/utilities/math/CudaMath.cuh>
 #include "TriangleException.h"
 
 #include "Serialization/TriangleMemento.h"
 
+#include "grid/NodeValues.h"
+
 HOSTDEVICE Triangle::Triangle(Vertex &v1, Vertex &v2, Vertex &v3, Vertex &normal) : v1(v1), v2(v2), v3(v3), normal(normal) {}
 HOSTDEVICE Triangle::Triangle(Vertex &v1, Vertex &v2, Vertex &v3) : v1(v1), v2(v2), v3(v3) { calcNormal(); }
 HOSTDEVICE Triangle::Triangle(){}
@@ -24,33 +26,39 @@ HOSTDEVICE void Triangle::calcNormal()
     normal.normalize();
 }
 
+HOSTDEVICE void Triangle::initalLayerThickness(real delta)
+{
+    this->layerThickness = delta*(abs(this->normal.x) + abs(this->normal.y) + abs(this->normal.z));
+}
+
+
 HOSTDEVICE char Triangle::isUnderFace(const Vertex &point) const
 {
-    real s, delta;
-    delta = abs(this->normal.x) + abs(this->normal.y) + abs(this->normal.z); //TODO: muss eigentlich nicht fuer jeden Punkt neu berechnet werden
+    real s;
 
-    if (this->isUnterExtendedFace(point, s, delta))
+    if (this->isUnterExtendedFace(point, s))
         if (this->isNotNextToFace(point))
             if (this->isUnderAngleToNeighbors(point))
-                if (this->isStopper(point))
-                    return 1;
+                if (this->isNegativeDirectionBorder(point))
+                    return NEGATIVE_DIRECTION_BORDER;
                 else
-                    return 99; //solid
+                    return INSIDE;
             else 
                 return 4;
         else
             return 3;
-    else if (this->isQNode(point, s, delta))
-        return 6;
-    else
-        return 2;
+
+
+    if (this->isQNode(point, s))
+        return Q;
     
+    return FLUID;
 }
 
-HOSTDEVICE bool Triangle::isUnterExtendedFace(const Vertex &point, real &s, real &delta) const
+HOSTDEVICE bool Triangle::isUnterExtendedFace(const Vertex & point, real &s) const
 {
     s = this->getPerpedicularDistanceFrom(point);
-    return ((CudaMath::greaterEqual(s, 0.0f)) && s < delta);
+    return ((CudaMath::greaterEqual(s, 0.0f)) && s < this->layerThickness);
 }
 
 HOSTDEVICE real Triangle::getPerpedicularDistanceFrom(const Vertex &P) const
@@ -64,15 +72,15 @@ HOSTDEVICE Vertex Triangle::getPerpedicularPointFrom(const Vertex &P) const
     return P + normal * getPerpedicularDistanceFrom(P);
 }
 
-HOSTDEVICE bool Triangle::isQNode(const Vertex &point, const real &s, const real &delta) const
+HOSTDEVICE bool Triangle::isQNode(const Vertex & point, const real &s) const
 {
-    return (s < 0 && CudaMath::lessEqual(-s, delta));
+    return (s < 0 && CudaMath::lessEqual(-s, this->layerThickness));
     //calculateQs(actualPoint, actualTriangle);
 }
 
-HOSTDEVICE bool Triangle::isStopper(const Vertex &point) const
+HOSTDEVICE bool Triangle::isNegativeDirectionBorder(const Vertex &point) const
 {
-    return (CudaMath::lessEqual(normal.x, 0.0f) || CudaMath::lessEqual(normal.y, 0.0f) || CudaMath::lessEqual(normal.z, 0.0f));
+    return normal.x < 0.0f || normal.y < 0.0f || normal.z < 0.0f;
     //return (sVector.x < 0.0f && sVector.y < 0.0f && sVector.z < 0.0f);
 }
 
diff --git a/src/GridGenerator/geometries/Triangle/Triangle.cuh b/src/GridGenerator/geometries/Triangle/Triangle.h
similarity index 88%
rename from src/GridGenerator/geometries/Triangle/Triangle.cuh
rename to src/GridGenerator/geometries/Triangle/Triangle.h
index 481bebd1f77ed57d554e0a63ff3b08fd9e5a8dd9..5d6973ed13899e5863780dd1ac383848d1f1d06c 100644
--- a/src/GridGenerator/geometries/Triangle/Triangle.cuh
+++ b/src/GridGenerator/geometries/Triangle/Triangle.h
@@ -3,7 +3,6 @@
 
 #include "GridGenerator/global.h"
 
-
 #include "../Vertex/Vertex.cuh"
 
 #include <memory>
@@ -15,6 +14,7 @@ struct VF_PUBLIC Triangle
 {
     Vertex v1, v2, v3, normal;
     real alphaAngles[3];
+    real layerThickness;
     
 	HOSTDEVICE Triangle(Vertex &v1, Vertex &v2, Vertex &v3, Vertex &normal);
 	HOSTDEVICE Triangle(Vertex &v1, Vertex &v2, Vertex &v3);
@@ -23,6 +23,8 @@ struct VF_PUBLIC Triangle
 	HOSTDEVICE void set(const Vertex &v1, const Vertex &v2, const Vertex &v3);
 	HOSTDEVICE void calcNormal();
 
+    HOSTDEVICE void initalLayerThickness(real delta);
+
 
 	Vertex getCenterOfMass() const;
 	real getHalfAngleBetweenToAdjacentTriangle(const Triangle &t2) const;
@@ -37,14 +39,14 @@ struct VF_PUBLIC Triangle
 
     HOSTDEVICE char isUnderFace(const Vertex &point) const;
 
-    HOSTDEVICE bool isUnterExtendedFace(const Vertex & point, real &s, real &delta) const;
+    HOSTDEVICE bool isUnterExtendedFace(const Vertex & point, real &s) const;
     HOSTDEVICE bool isNotNextToFace(const Vertex &point) const;
     HOSTDEVICE bool isUnderAngleToNeighbors(const Vertex &point) const;
     HOSTDEVICE void getClosestPointsOnEdges(Vertex arr[], const Vertex &P) const;
     HOSTDEVICE real getPerpedicularDistanceFrom(const Vertex &P) const;
     HOSTDEVICE Vertex getPerpedicularPointFrom(const Vertex &P) const;
-    HOSTDEVICE bool isQNode(const Vertex & point, const real &s, const real &delta) const;
-    HOSTDEVICE bool isStopper(const Vertex & point) const;
+    HOSTDEVICE bool isQNode(const Vertex & point, const real &s) const;
+    HOSTDEVICE bool isNegativeDirectionBorder(const Vertex & point) const;
 
     HOST bool operator==(const Triangle &t) const;
 
diff --git a/src/GridGenerator/geometries/Triangle/TriangleTest.cpp b/src/GridGenerator/geometries/Triangle/TriangleTest.cpp
index 8bbbee2e0db7bda160e7d5159c8ca3983201cf24..1de09e089141519692ba4734d3415e8772326538 100644
--- a/src/GridGenerator/geometries/Triangle/TriangleTest.cpp
+++ b/src/GridGenerator/geometries/Triangle/TriangleTest.cpp
@@ -2,7 +2,7 @@
 #include <GridGenerator/utilities/Transformator/Transformator.h>
 #include "TriangleException.h"
 
-#include "Triangle.cuh"
+#include "Triangle.h"
 
 
 using namespace testing;
diff --git a/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.h b/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
index df2de0612b226fd24be2eec81bfa60b3a1d452a2..2eafb51e55cd4ff2ea4def577c8ffe9156fe13ea 100644
--- a/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
+++ b/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
@@ -10,21 +10,22 @@
 #include <string>
 #include <memory>
 
-#include "../Triangle/Triangle.cuh"
+#include "../Triangle/Triangle.h"
 #include <GridGenerator/utilities/Transformator/Transformator.h>
-#include "../BoundingBox/BoundingBox.cuh"
+#include "../BoundingBox/BoundingBox.h"
 
+#include "../Object.h"
 
 class GeometryMemento;
 
-struct TriangularMesh
+struct TriangularMesh : public Object
 {
 public:
 	VF_PUBLIC TriangularMesh();
 	VF_PUBLIC TriangularMesh(const TriangularMesh& geo);
     VF_PUBLIC TriangularMesh(const std::string& inputPath);
 	VF_PUBLIC TriangularMesh(const std::string& inputPath, const BoundingBox<int> &box, const Transformator *trafo);
-	VF_PUBLIC ~TriangularMesh();
+	HOSTDEVICE VF_PUBLIC ~TriangularMesh();
 	VF_PUBLIC Transformator* getTransformator();
 
 	VF_PUBLIC void setTriangles(std::vector<Triangle> triangles);
@@ -40,15 +41,31 @@ public:
 
     HOST VF_PUBLIC GeometryMemento getState() const;
     HOST VF_PUBLIC void setState(const GeometryMemento &memento);
+    VF_PUBLIC void findNeighbors();
 
 
 
 private:
 	
 	Transformator* transformator;
-	void findNeighbors();
 	void initalizeDataFromTriangles();
 
+public:
+    HOSTDEVICE Object* clone() const override { return new TriangularMesh(); }
+    double getX1Centroid() override { throw "Not implemented in TriangularMesh"; }
+    double getX1Minimum() override { return minmax.minX; }
+    double getX1Maximum() override { return minmax.maxX; }
+    double getX2Centroid() override { throw "Not implemented in TriangularMesh"; }
+    double getX2Minimum() override { return minmax.minY; }
+    double getX2Maximum() override { return minmax.maxY; }
+    double getX3Centroid() override { throw "Not implemented in TriangularMesh"; }
+    double getX3Minimum() override { return minmax.minZ; }
+    double getX3Maximum() override { return minmax.maxZ; }
+    void scale(double delta) override { throw "Not implemented in TriangularMesh"; }
+    HOSTDEVICE bool isPointInObject(const double& x1, const double& x2, const double& x3, const double& minOffset,
+        const double& maxOffset) override {
+        return false;
+    }
 };
 
 
diff --git a/src/GridGenerator/geometries/Vertex/Vertex.cu b/src/GridGenerator/geometries/Vertex/Vertex.cu
index 00b3fbbe9776513a7eb1803c1f61573c48d3b2cd..47c806d5dcb5b7b0c48704aeeebcb3cf520f0ea3 100644
--- a/src/GridGenerator/geometries/Vertex/Vertex.cu
+++ b/src/GridGenerator/geometries/Vertex/Vertex.cu
@@ -157,18 +157,30 @@ HOSTDEVICE void Vertex::setMinMax(real & minX, real & maxX, real & minY, real &
 }
 
 
+HOSTDEVICE real getMinimum(const real &value1, const real &value2)
+{
+    return value1 < value2 ? value1 : value2;
+}
+
+HOSTDEVICE real getMaximum(const real &value1, const real &value2)
+{
+    return value1 > value2 ? value1 : value2;
+}
+
+
 HOSTDEVICE void Vertex::calculateMinMax(const real &value1, const real &value2, const real &value3, real &min, real &max)
 {
-    min = value1;
-    max = value2;
-    if (value1 > value2) {
-        min = value2;
-        max = value1;
-    }
-    if (min > value3) {
-        min = value3;
-    }
-    if (max < value3) {
-        max = value3;
-    }
+    
+    real newMinimum = value1;
+    newMinimum = getMinimum(value2, newMinimum);
+    newMinimum = getMinimum(value3, newMinimum);
+
+    real newMaximum = value1;
+    newMaximum = getMaximum(value2, newMaximum);
+    newMaximum = getMaximum(value3, newMaximum);
+
+    min = newMinimum;
+    max = newMaximum;
 }
+
+
diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
index 06e8c5b556355f56e14cb1364f06bdf0193d575f..c2bcbfdc3b52d85a12b5bdbd5a8a9e2c128356da 100644
--- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
+++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
@@ -6,8 +6,8 @@
 #include <GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h>
 #include <GridGenerator/grid/partition/Partition.h>
 
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
+#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 #include <GridGenerator/geometries/TriangularMesh/TriangularMesh.h>
 
 
diff --git a/src/GridGenerator/grid/GridBuilder/ParallelGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/ParallelGridBuilder.cpp
index 2e97af002ac6ac718a07637496ca5e5b73468809..a0e6df4a4b4ec8abe98e71753635f755f28947d2 100644
--- a/src/GridGenerator/grid/GridBuilder/ParallelGridBuilder.cpp
+++ b/src/GridGenerator/grid/GridBuilder/ParallelGridBuilder.cpp
@@ -9,8 +9,8 @@
 //#include <GridGenerator/grid/GridWrapper/GridWrapperGPU/GridWrapperGPU.h>
 //#include <GridGenerator/grid/partition/Partition.h>
 //
-//#include <GridGenerator/geometries/Triangle/Triangle.cuh>
-//#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+//#include <GridGenerator/geometries/Triangle/Triangle.h>
+//#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 //#include <GridGenerator/geometries/TriangularMesh/TriangularMesh.h>
 //
 //#include <GridGenerator/utilities/Transformator/Transformator.h>
diff --git a/src/GridGenerator/grid/GridImp.cu b/src/GridGenerator/grid/GridImp.cu
index 414fbbbf16f03ee7efdbf73efc8261e078f247ed..024767c062aa3440aed2a368f33da68a3c8ed82a 100644
--- a/src/GridGenerator/grid/GridImp.cu
+++ b/src/GridGenerator/grid/GridImp.cu
@@ -11,8 +11,9 @@
 #include "distributions/Distribution.h"
 
 #include <GridGenerator/geometries/Vertex/Vertex.cuh>
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
+#include <GridGenerator/geometries/TriangularMesh/TriangularMesh.h>
+#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 
 #include <GridGenerator/grid/NodeValues.h>
 #include <GridGenerator/grid/distributions/Distribution.h>
@@ -22,6 +23,9 @@
 #include "GridInterface.h"
 
 #include "geometries/Object.h"
+#include "Field.h"
+
+#include "io/GridVTKWriter/GridVTKWriter.h"
 
 
 
@@ -71,10 +75,69 @@ HOST void GridImp::inital()
     field.allocateMemory();
     gridStrategy->allocateGridMemory(shared_from_this());
 
-    gridStrategy->findInnerNodes(shared_from_this());
+    gridStrategy->initalNodesToOutOfGrid(shared_from_this());
+
+    TriangularMesh* triangularMesh = dynamic_cast<TriangularMesh*>(object);
+    if(triangularMesh)
+    {
+        gridStrategy->findInnerNodes(shared_from_this(), triangularMesh);
+    }
+    else
+        gridStrategy->findInnerNodes(shared_from_this());
+
     gridStrategy->findStopperNodes(shared_from_this());
 }
 
+HOSTDEVICE void GridImp::initalNodeToOutOfGrid(uint index)
+{
+    this->field.setFieldEntryToOutOfGrid(index);
+}
+
+
+HOSTDEVICE void GridImp::meshReverse(Triangle &triangle)
+{
+    BoundingBox<real> box = BoundingBox<real>::makeRealNodeBox(triangle, startX, startY, startZ, delta);
+    triangle.initalLayerThickness(getDelta());
+
+    for (real x = box.minX; x <= box.maxX; x += delta)
+    {
+        for (real y = box.minY; y <= box.maxY; y += delta)
+        {
+            for (real z = box.minZ; z <= box.maxZ; z += delta)
+            {
+                const uint index = this->transCoordToIndex(x, y, z);
+
+                const Vertex point(x, y, z);
+
+                const char pointValue = triangle.isUnderFace(point);
+
+                if (pointValue == NEGATIVE_DIRECTION_BORDER)
+                    field.setFieldEntry(index, NEGATIVE_DIRECTION_BORDER);
+                else if (pointValue == INSIDE)
+                    field.setFieldEntryToFluid(index);
+            }
+        }
+    }
+}
+
+HOSTDEVICE void GridImp::setInsideNode(const int &index, bool &insideNodeFound)
+{
+    if (field.is(index, NEGATIVE_DIRECTION_BORDER))
+        return;
+
+    if (!field.isFluid(index) && this->nodeInNextCellIs(index, FLUID))
+    {
+        field.setFieldEntryToFluid(index);
+        insideNodeFound = true;
+    }
+}
+
+HOSTDEVICE void GridImp::setNegativeDirBorder_toFluid(const uint &index)
+{
+    if (field.is(index, NEGATIVE_DIRECTION_BORDER))
+        field.setFieldEntryToFluid(index);
+}
+
 HOST void GridImp::freeMemory()
 {
     gridStrategy->freeMemory(shared_from_this());
@@ -100,8 +163,6 @@ HOSTDEVICE void GridImp::findInnerNode(uint index)
     const Cell cell = getOddCellFromIndex(index);
     if (isInside(cell))
         this->field.setFieldEntryToFluid(index);
-    else
-        this->field.setFieldEntryToOutOfGrid(index);
 }
 
 bool GridImp::isInside(const Cell& cell) const
@@ -432,11 +493,11 @@ HOSTDEVICE void GridImp::findOverlapStopper(uint index, GridImp& finerGrid)
 // --------------------------------------------------------- //
 //                    Mesh Triangle                          //
 // --------------------------------------------------------- //
-HOST void GridImp::mesh(TriangularMesh &geometry)
+HOST void GridImp::mesh(TriangularMesh &triangularMesh)
 {
     const clock_t begin = clock();
 
-    gridStrategy->mesh(shared_from_this(), geometry);
+    gridStrategy->mesh(shared_from_this(), triangularMesh);
 
     const clock_t end = clock();
     const real time = (real)(real(end - begin) / CLOCKS_PER_SEC);
@@ -444,9 +505,10 @@ HOST void GridImp::mesh(TriangularMesh &geometry)
     *logging::out << logging::Logger::INTERMEDIATE << "time grid generation: " + SSTR(time) + "s\n";
 }
 
-HOSTDEVICE void GridImp::mesh(const Triangle &triangle)
+HOSTDEVICE void GridImp::mesh(Triangle &triangle)
 {
-    BoundingBox<real> box = BoundingBox<real>::makeRealNodeBox(triangle, delta);
+    BoundingBox<real> box = BoundingBox<real>::makeRealNodeBox(triangle, startX, startY, startZ, delta);
+    triangle.initalLayerThickness(getDelta());
 
     for (real x = box.minX; x <= box.maxX; x += delta)
     {
@@ -506,24 +568,25 @@ HOSTDEVICE void GridImp::calculateQs(const Vertex &point, const Triangle &triang
 
 
 // --------------------------------------------------------- //
-//               find inner Solid Nodes                      //
+//                  find inner nodes                         //
 // --------------------------------------------------------- //
-HOSTDEVICE void GridImp::setInvalidNode(const int &index, bool &invalidNodeFound)
-{
-    if (field.isSolid(index))
-        return;
+//HOSTDEVICE void GridImp::setInvalidNode(const int &index, bool &insideNodeFound)
+//{
+//    if (field.isNegativeDirectionBorder(index))
+//        return;
+//
+//    if (!field.isInside(index) && this->nodeInNextCellIs(index, INSIDE))
+//    {
+//        field.setFieldEntryToInvalid(index);
+//        insideNodeFound = true;
+//    }
+//}
+
+//HOSTDEVICE bool GridImp::isNeighborInside(const int &index) const
+//{
+//    return (field.isInside(neighborIndexX[index]) || field.isInside(neighborIndexY[index]) || field.isInside(neighborIndexZ[index]));
+//}
 
-    if (!field.isInvalid(index) && this->isNeighborInvalid(index))
-    {
-        field.setFieldEntryToInvalid(index);
-        invalidNodeFound = true;
-    }
-}
-
-HOSTDEVICE bool GridImp::isNeighborInvalid(const int &index) const
-{
-    return (field.isInvalid(neighborIndexX[index]) || field.isInvalid(neighborIndexY[index]) || field.isInvalid(neighborIndexZ[index]));
-}
 // --------------------------------------------------------- //
 //                        Getter                             //
 // --------------------------------------------------------- //
diff --git a/src/GridGenerator/grid/GridImp.h b/src/GridGenerator/grid/GridImp.h
index 572c12e065eab7e29a883a8a1279969ce0c6d78e..85dd6b271f747b032d72dff0c25f3a6f6ac2a402 100644
--- a/src/GridGenerator/grid/GridImp.h
+++ b/src/GridGenerator/grid/GridImp.h
@@ -77,6 +77,8 @@ public:
 public:
     Distribution distribution;
 
+    HOSTDEVICE void initalNodeToOutOfGrid(uint index);
+
     HOSTDEVICE void findInnerNode(uint index);
 
     bool isInside(const Cell& cell) const;
@@ -146,7 +148,10 @@ private:
 
 public:
     HOST void mesh(TriangularMesh &geometry) override;
-    HOSTDEVICE void mesh(const Triangle &triangle);
+    HOSTDEVICE void mesh(Triangle &triangle);
+    HOSTDEVICE void meshReverse(Triangle &triangle);
+    HOSTDEVICE void setInsideNode(const int &index, bool &invalidNodeFound);
+    HOSTDEVICE void setNegativeDirBorder_toFluid(const uint &index);
 
 private:
     HOSTDEVICE void setDebugPoint(uint index, int pointValue);
@@ -154,9 +159,8 @@ private:
 
 
 public:
-    HOSTDEVICE void setInvalidNode(const int &index, bool &invalidNodeFound);
 private:
-    HOSTDEVICE bool isNeighborInvalid(const int &index) const;
+    //HOSTDEVICE bool isNeighborInside(const int &index) const;
 
 
 private:
diff --git a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp
index 00ca7ee017153ac1e0fa714fa8055a74c4b9498c..d9c6c7ee2f88ed14a600b5a2ce4b23754183795f 100644
--- a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp
+++ b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp
@@ -14,6 +14,7 @@
 #include "grid/NodeValues.h"
 
 #include "grid/GridInterface.h"
+#include "io/GridVTKWriter/GridVTKWriter.h"
 
 void GridCpuStrategy::allocateGridMemory(SPtr<GridImp> grid)
 {
@@ -33,6 +34,13 @@ void GridCpuStrategy::allocateGridMemory(SPtr<GridImp> grid)
     grid->distribution.f = new real[distributionSize](); // automatic initialized with zeros
 }
 
+void GridCpuStrategy::initalNodesToOutOfGrid(SPtr<GridImp> grid)
+{
+#pragma omp parallel for
+    for (uint index = 0; index < grid->size; index++)
+        grid->initalNodeToOutOfGrid(index);
+}
+
 void GridCpuStrategy::allocateFieldMemory(Field* field)
 {
     field->field = new char[field->size];
@@ -50,6 +58,25 @@ void GridCpuStrategy::findInnerNodes(SPtr<GridImp> grid)
         << "nodes: " << grid->nx << " x " << grid->ny << " x " << grid->nz << " = " << grid->size << "\n";
 }
 
+void GridCpuStrategy::findInnerNodes(SPtr<GridImp> grid, TriangularMesh* triangularMesh)
+{
+#pragma omp parallel for
+    for (int i = 0; i < triangularMesh->size; i++)
+        grid->meshReverse(triangularMesh->triangles[i]);
+
+    GridVTKWriter::writeSparseGridToVTK(grid, "D:/GRIDGENERATION/gridBeforeStopper");
+
+    findInsideNodes(grid);
+
+#pragma omp parallel for
+    for (int i = 0; i < grid->size; i++)
+        grid->setNegativeDirBorder_toFluid(i);
+
+    *logging::out << logging::Logger::INTERMEDIATE
+        << "Grid created: " << "from (" << grid->startX << ", " << grid->startY << ", " << grid->startZ << ") to (" << grid->endX << ", " << grid->endY << ", " << grid->endZ << ")\n"
+        << "nodes: " << grid->nx << " x " << grid->ny << " x " << grid->nz << " = " << grid->size << "\n";
+}
+
 void GridCpuStrategy::findStopperNodes(SPtr<GridImp> grid)
 {
 #pragma omp parallel for
@@ -136,7 +163,7 @@ void GridCpuStrategy::deleteSolidNodes(SPtr<GridImp> grid)
 {
     clock_t begin = clock();
 
-    findInvalidNodes(grid);
+    findInsideNodes(grid);
     grid->updateSparseIndices();
     findForNeighborsNewIndices(grid);
 
@@ -145,14 +172,14 @@ void GridCpuStrategy::deleteSolidNodes(SPtr<GridImp> grid)
     *logging::out << logging::Logger::INTERMEDIATE << "time delete solid nodes: " + SSTR(time / 1000) + "sec\n";
 }
 
-void GridCpuStrategy::findInvalidNodes(SPtr<GridImp> grid)
+void GridCpuStrategy::findInsideNodes(SPtr<GridImp> grid)
 {
-    bool foundInvalidNode = true;
-    while (foundInvalidNode)
+    bool foundInsideNode = true; 
+    while (foundInsideNode)
     {
-        foundInvalidNode = false;
+        foundInsideNode = false;
         for (uint index = 0; index < grid->size; index++)
-            grid->setInvalidNode(index, foundInvalidNode);
+            grid->setInsideNode(index, foundInsideNode);
     }
 }
 
diff --git a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h
index 08ad7b2ae813782e6a4e8e9e949cf6f9e47b8d22..f7919a0494c407f2b7f4094a56d17a62cba14aad 100644
--- a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h
+++ b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h
@@ -18,7 +18,9 @@ public:
 
     void allocateGridMemory(SPtr<GridImp> grid) override;
 
+    void initalNodesToOutOfGrid(SPtr<GridImp> grid) override;
     void findInnerNodes(SPtr<GridImp> grid) override;
+    void findInnerNodes(SPtr<GridImp> grid, TriangularMesh* triangularMesh) override;
     void findStopperNodes(SPtr<GridImp> grid) override;
 
     void mesh(SPtr<GridImp> grid, TriangularMesh &geom) override;
@@ -33,7 +35,7 @@ public:
     virtual void copyDataFromGPU() {};
 
 protected:
-    static void findInvalidNodes(SPtr<GridImp> grid);
+    static void findInsideNodes(SPtr<GridImp> grid);
     static void findForNeighborsNewIndices(SPtr<GridImp> grid);
     static void findForGridInterfaceNewIndices(SPtr<GridImp> grid, SPtr<GridImp> fineGrid);
 
diff --git a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategyTest.cpp b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategyTest.cpp
index e772e45f3051c07acf5fc3e84a4786b018a63133..09ee08568d2fa34ba1f7cf256af8019f075595a1 100644
--- a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategyTest.cpp
+++ b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategyTest.cpp
@@ -5,8 +5,8 @@
 //
 //#include <string>
 //
-//#include <stl/Triangle.cuh>
-//#include <stl/BoundingBox.cuh>
+//#include <stl/Triangle.h>
+//#include <stl/BoundingBox.h>
 //
 //#include <grid/kernel/runGridKernelGPU.cuh>
 //#include <grid/distributions/D3Q7.h>
diff --git a/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.cpp b/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.cpp
index dc04d661be0e3a0a4bd3e63ed548dc2bffcb4e8a..9ec6d40da8ea9294af3a5b0e099425a556172799 100644
--- a/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.cpp
+++ b/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.cpp
@@ -6,7 +6,7 @@
 #include <GridGenerator/utilities/cuda/CudaErrorCheck.cu>
 #include <GridGenerator/utilities/Launchparameter/LaunchParameter.cuh>
 
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 #include <GridGenerator/geometries/TriangularMesh/TriangularMesh.h>
 
 #include <GridGenerator/grid/kernel/runGridKernelGPU.cuh>
@@ -30,6 +30,16 @@ void GridGpuStrategy::allocateGridMemory(SPtr<GridImp> grid)
     this->allocNeighborsIndices(grid);
 }
 
+void GridGpuStrategy::initalNodesToOutOfGrid(SPtr<GridImp> grid)
+{
+
+}
+
+void GridGpuStrategy::findInnerNodes(SPtr<GridImp> grid, TriangularMesh* triangularMesh)
+{
+
+}
+
 
 void GridGpuStrategy::findInnerNodes(SPtr<GridImp> grid)
 {
diff --git a/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h b/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h
index 72b89faa829a774efb060986f41cafe7f23ae21a..8e6c60c9393091eda41170f4b8353ddfb37b9bfe 100644
--- a/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h
+++ b/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h
@@ -17,6 +17,8 @@ public:
 
     void allocateGridMemory(SPtr<GridImp> grid) override;
 
+    void initalNodesToOutOfGrid(SPtr<GridImp> grid) override;
+    void findInnerNodes(SPtr<GridImp> grid, TriangularMesh* triangularMesh) override;
     void findInnerNodes(SPtr<GridImp> grid) override;
     void findStopperNodes(SPtr<GridImp> grid) override;
 
@@ -57,6 +59,7 @@ public:
     void allocateFieldMemory(Field* field) override;
     void freeFieldMemory(Field* field) override;
     void findSparseIndices(SPtr<GridImp> coarseGrid, SPtr<GridImp> fineGrid) override;
+    
 };
 
 #endif
diff --git a/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategyTest.cpp b/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategyTest.cpp
index da1ecb59b2c7f9e93e840715385d12d11b835dcf..747378c3a3ec495538e59f7886f1d4c936f346f7 100644
--- a/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategyTest.cpp
+++ b/src/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategyTest.cpp
@@ -4,8 +4,8 @@
 //
 //#include <string>
 //
-//#include <stl/Triangle.cuh>
-//#include <stl/BoundingBox.cuh>
+//#include <stl/Triangle.h>
+//#include <stl/BoundingBox.h>
 //
 //#include <grid/kernel/runGridKernelGPU.cuh>
 //#include <grid/distributions/D3Q7.h>
diff --git a/src/GridGenerator/grid/GridStrategy/GridStrategy.h b/src/GridGenerator/grid/GridStrategy/GridStrategy.h
index 566162bbdb51041f3191001d608f5789bd99830d..0d244c93f29f90dda58e5d1f48386039c5c5a4e5 100644
--- a/src/GridGenerator/grid/GridStrategy/GridStrategy.h
+++ b/src/GridGenerator/grid/GridStrategy/GridStrategy.h
@@ -18,7 +18,10 @@ public:
 
     virtual void allocateGridMemory(SPtr<GridImp> grid) = 0;
 
+    virtual void initalNodesToOutOfGrid(SPtr<GridImp> grid) = 0;
+
     virtual void findInnerNodes(SPtr<GridImp> grid) = 0;
+    virtual void findInnerNodes(SPtr<GridImp> grid, TriangularMesh* triangularMesh) = 0;
     virtual void findStopperNodes(SPtr<GridImp> grid) = 0;
 
     virtual void mesh(SPtr<GridImp> grid, TriangularMesh &geom) = 0;
diff --git a/src/GridGenerator/grid/GridStrategy/GridStrategyMocks.h b/src/GridGenerator/grid/GridStrategy/GridStrategyMocks.h
index bdeef3126c780563ab0873dabadf481749bd0f62..e363f7295914606746b7f17dd5bc009d4fe8328b 100644
--- a/src/GridGenerator/grid/GridStrategy/GridStrategyMocks.h
+++ b/src/GridGenerator/grid/GridStrategy/GridStrategyMocks.h
@@ -16,6 +16,8 @@ public:
 
     virtual void allocateGridMemory(SPtr<GridImp> grid) override {}
 
+    virtual void initalNodesToOutOfGrid(SPtr<GridImp> grid) override {}
+    virtual void findInnerNodes(SPtr<GridImp> grid, TriangularMesh* triangularMesh) override {}
     virtual void findInnerNodes(SPtr<GridImp> grid) override {}
     virtual void findStopperNodes(SPtr<GridImp> grid) override {}
 
@@ -30,7 +32,8 @@ public:
     virtual void freeFieldMemory(Field* field) override {}
 
     virtual void findSparseIndices(SPtr<GridImp> coarseGrid, SPtr<GridImp> fineGrid) override {}
-    
+
+
 };
 
 #endif
diff --git a/src/GridGenerator/grid/GridTest.cpp b/src/GridGenerator/grid/GridTest.cpp
index 5fb2f14a639f2d327d385b4b91491822407bb08c..afad036c01942cae066070d0393ace7050240c39 100644
--- a/src/GridGenerator/grid/GridTest.cpp
+++ b/src/GridGenerator/grid/GridTest.cpp
@@ -3,8 +3,8 @@
 
 #include <vector>
 #include <GridGenerator/geometries/Vertex/Vertex.cuh>
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
+#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 #include "GridStrategy/GridCpuStrategy/GridCpuStrategy.h"
 #include "GridStrategy/GridStrategyMocks.h"
 //
diff --git a/src/GridGenerator/grid/NodeValues.h b/src/GridGenerator/grid/NodeValues.h
index 0cecb0c0c2dacad022b0a35d83581fc5ad770dab..5fda00c32487345f07baa6c76101818a51ca9204 100644
--- a/src/GridGenerator/grid/NodeValues.h
+++ b/src/GridGenerator/grid/NodeValues.h
@@ -20,6 +20,10 @@
 #define INVALID_NODE 9
 
 
+#define INSIDE 10
+#define NEGATIVE_DIRECTION_BORDER 11
+
+
 
 #define Q 6
 #define NOSLIP 2
diff --git a/src/GridGenerator/grid/kernel/runGridKernelGPU.cu b/src/GridGenerator/grid/kernel/runGridKernelGPU.cu
index 8724680482014ad6f082003af21013f4ac2e7c86..3ae5c605f7bdd814e1963b6f17c2216369350c78 100644
--- a/src/GridGenerator/grid/kernel/runGridKernelGPU.cu
+++ b/src/GridGenerator/grid/kernel/runGridKernelGPU.cu
@@ -140,7 +140,7 @@ GLOBAL void setInvalidNodes(GridImp grid, bool *foundInvalidNode)
 {
     uint index = LaunchParameter::getGlobalIdx_2D_1D();
     if (index < grid.getSize())
-        grid.setInvalidNode(index, *foundInvalidNode);
+        grid.setInsideNode(index, *foundInvalidNode);
 }
 
 
diff --git a/src/GridGenerator/grid/partition/Partition.cpp b/src/GridGenerator/grid/partition/Partition.cpp
index dc466de6429ed06691d7a4ed2a2c12e47e7c5040..e612d2402ce66c737a83ee2d8c6c0b20c8061e12 100644
--- a/src/GridGenerator/grid/partition/Partition.cpp
+++ b/src/GridGenerator/grid/partition/Partition.cpp
@@ -6,9 +6,9 @@
 
 #include <GridGenerator/global.h>
 #include <GridGenerator/grid/Grid.h>
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
 #include <GridGenerator/geometries/Vertex/Vertex.cuh>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 #include <GridGenerator/io/GridVTKWriter/GridVTKWriter.h>
 #include <GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.h>
 #include <GridGenerator/utilities/Transformator/TransformatorImp.h>
diff --git a/src/GridGenerator/io/STLReaderWriter/STLReader.cpp b/src/GridGenerator/io/STLReaderWriter/STLReader.cpp
index 597fc2b2f7ed48fe95a2b21fcd34bdb6b839739f..fb3143e4afacf1eb7622533f6a5ca91ed0ef15ea 100644
--- a/src/GridGenerator/io/STLReaderWriter/STLReader.cpp
+++ b/src/GridGenerator/io/STLReaderWriter/STLReader.cpp
@@ -8,8 +8,8 @@
 
 #include <GridGenerator/utilities/Transformator/TransformatorImp.h>
 #include <GridGenerator/geometries/Vertex/Vertex.cuh>
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
+#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 #include <GridGenerator/geometries/TriangularMesh/TriangularMesh.h>
 
 #include <utilities/logger/Logger.h>
@@ -64,7 +64,7 @@ std::vector<Triangle> STLReader::readSTL(const std::string& name, const Transfor
     }
 }
 
-TriangularMesh STLReader::getGeometry(const std::string& name, const Transformator& trans)
+TriangularMesh* STLReader::makeTriangularMesh(const std::string& name)
 {
 	std::ifstream file(name.c_str());
 	if (file.is_open()) {
@@ -74,12 +74,12 @@ TriangularMesh STLReader::getGeometry(const std::string& name, const Transformat
 		if (strcmp(line.c_str(), "solid ascii") == 0) {
 			file.close();
 			*logging::out << logging::Logger::INTERMEDIATE << "start reading ascii STL file: " + name + "\n";
-			return getGeometryFromASCIISTL(name, trans);
+			return getGeometryFromASCIISTL(name);
 		}
 		else {
 			file.close();
 			*logging::out << logging::Logger::INTERMEDIATE << "start reading binary STL file: " + name + "\n";
-			return getGeometryFromBinarySTL(name, trans);
+			return getGeometryFromBinarySTL(name);
 		}
 	}
 	else {
@@ -88,7 +88,7 @@ TriangularMesh STLReader::getGeometry(const std::string& name, const Transformat
 	}
 }
 
-TriangularMesh STLReader::getGeometryFromBinarySTL(const std::string& name, const Transformator& trans)
+TriangularMesh* STLReader::getGeometryFromBinarySTL(const std::string& name)
 {
 	FILE *file;
 	std::string mode = "rb";
@@ -107,7 +107,7 @@ TriangularMesh STLReader::getGeometryFromBinarySTL(const std::string& name, cons
 	std::vector<Triangle> triangles;
 
 	char facet[50];
-	TriangularMesh geometry;
+	TriangularMesh* geometry = new TriangularMesh();
 	BoundingBox<real> box = BoundingBox<real>::makeInvalidMinMaxBox();
 
 	for (unsigned int i = 0; i < nTriLong; i++) {
@@ -119,22 +119,19 @@ TriangularMesh STLReader::getGeometryFromBinarySTL(const std::string& name, cons
 		Vertex p2 = getVertexFromChar(facet + 24);
 		Vertex p3 = getVertexFromChar(facet + 36);
 
-		trans.transformWorldToGrid(p1);
-		trans.transformWorldToGrid(p2);
-		trans.transformWorldToGrid(p3);
-
         Triangle t(p1, p2, p3, normal);
 
 		box.setMinMax(t);
 		triangles.push_back(t);
 	}
-	geometry.setTriangles(triangles);
-	geometry.setMinMax(box);
+	geometry->setTriangles(triangles);
+	geometry->setMinMax(box);
+    geometry->findNeighbors();
 	fclose(file);
 	return geometry;
 }
 
-TriangularMesh STLReader::getGeometryFromASCIISTL(const std::string& name, const Transformator& trans)
+TriangularMesh* STLReader::getGeometryFromASCIISTL(const std::string& name)
 {
 	int lines = countLinesInFile(name);
 	int nTriangles = (lines) / 7; // seven lines per triangle
@@ -147,7 +144,7 @@ TriangularMesh STLReader::getGeometryFromASCIISTL(const std::string& name, const
 	file.open(name.c_str(), std::ifstream::in);
 	std::getline(file, line); // solid ascii
 
-	TriangularMesh geometry;
+	TriangularMesh* geometry = new TriangularMesh();
 	BoundingBox<real> box = BoundingBox<real>::makeInvalidMinMaxBox();
 
 	for (int t = 0; t < nTriangles; t++) {
@@ -158,17 +155,16 @@ TriangularMesh STLReader::getGeometryFromASCIISTL(const std::string& name, const
 		Vertex p3 = parseLineToCoordinates(file, "%*s %f %f %f");
 		getline(file, line); //endloop
 		getline(file, line); //endfacet
-		trans.transformWorldToGrid(p1);
-		trans.transformWorldToGrid(p2);
-		trans.transformWorldToGrid(p3);
+
 		Triangle tri = Triangle(p1, p2, p3, normal);
 		tri.calcNormal();
 		triangles.push_back(tri);
 
 		box.setMinMax(tri);
 	}
-	geometry.setTriangles(triangles);
-	geometry.setMinMax(box);
+	geometry->setTriangles(triangles);
+	geometry->setMinMax(box);
+    geometry->findNeighbors();
 
 	file.close();
 	return geometry;
diff --git a/src/GridGenerator/io/STLReaderWriter/STLReader.h b/src/GridGenerator/io/STLReaderWriter/STLReader.h
index f1e7ab1ae0586ab97a35942502d9f99b9d462bd8..7bf6cf18c243d012050f2dbbeee08aeb8c0bea0a 100644
--- a/src/GridGenerator/io/STLReaderWriter/STLReader.h
+++ b/src/GridGenerator/io/STLReaderWriter/STLReader.h
@@ -23,9 +23,9 @@ public:
 	static std::vector<Triangle> readSTL(const std::string& name, const Transformator& trans);
 	static std::vector<Triangle> readSTL(const BoundingBox<int> &box, const std::string name, const Transformator& trans);
 
-	static TriangularMesh getGeometry(const std::string& name, const Transformator& trans);
-	static TriangularMesh getGeometryFromBinarySTL(const std::string& name, const Transformator& trans);
-	static TriangularMesh getGeometryFromASCIISTL(const std::string& name, const Transformator& trans);
+	static TriangularMesh* makeTriangularMesh(const std::string& name);
+	static TriangularMesh* getGeometryFromBinarySTL(const std::string& name);
+	static TriangularMesh* getGeometryFromASCIISTL(const std::string& name);
 
     static std::vector<Triangle> readBinarySTL(const std::string& name, const Transformator& trans);
     static std::vector<Triangle> readASCIISTL(const std::string& name, const Transformator& trans);
diff --git a/src/GridGenerator/io/STLReaderWriter/STLWriter.cpp b/src/GridGenerator/io/STLReaderWriter/STLWriter.cpp
index e4af8692e71e8804656024f5d834acd524243f31..e77f2fd6cbc599158fbd6cf5fb5b33a31c3ea473 100644
--- a/src/GridGenerator/io/STLReaderWriter/STLWriter.cpp
+++ b/src/GridGenerator/io/STLReaderWriter/STLWriter.cpp
@@ -8,7 +8,7 @@
 
 #include <GridGenerator/utilities/Transformator/Transformator.h>
 #include <GridGenerator/geometries/Vertex/Vertex.cuh>
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
 
 #include <utilities/logger/Logger.h>
 
diff --git a/src/GridGenerator/io/SimulationFileWriter/SimulationFileTest.cpp b/src/GridGenerator/io/SimulationFileWriter/SimulationFileTest.cpp
index 611bf0090da283073c34a65eeb93dd4303bb5e29..182d9d478bc2624350d2aa7bb2c3952ca93ed11c 100644
--- a/src/GridGenerator/io/SimulationFileWriter/SimulationFileTest.cpp
+++ b/src/GridGenerator/io/SimulationFileWriter/SimulationFileTest.cpp
@@ -1,8 +1,8 @@
 //#include "gmock/gmock.h"
 //
 //#include <GridGenerator/geometries/Vertex/Vertex.cuh>
-//#include <GridGenerator/geometries/Triangle/Triangle.cuh>
-//#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+//#include <GridGenerator/geometries/Triangle/Triangle.h>
+//#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 //#include <GridGenerator/geometries/TriangularMesh/TriangularMesh.h>
 //
 //#include <GridGenerator/grid/kernel/GridKernelCPU.h>
diff --git a/src/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.cpp b/src/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.cpp
index 3cd4a89e99b3d2f4fe314b49d672eb628de609b8..c5c0dd1eb2fae86619571db8a523c4b0b9c19cd7 100644
--- a/src/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.cpp
+++ b/src/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.cpp
@@ -4,9 +4,9 @@
 //
 //#include <VTKWriter/UnstructuredGridWriter/UnstructuredGridWriter.h>
 //
-//#include <GridGenerator/geometries/Triangle/Triangle.cuh>
+//#include <GridGenerator/geometries/Triangle/Triangle.h>
 //#include <GridGenerator/geometries/Vertex/Vertex.cuh>
-//#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+//#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 //#include <GridGenerator/grid/Grid.cuh>
 //
 //UnstructuredGridWrapper::UnstructuredGridWrapper()
diff --git a/src/GridGenerator/utilities/math/CudaMath.cu b/src/GridGenerator/utilities/math/CudaMath.cu
index 2ef80a1024cb84421fd9c336db3c8ba3369a3ba5..23394254e19c8c25e210383f5f02f913eeda57b9 100644
--- a/src/GridGenerator/utilities/math/CudaMath.cu
+++ b/src/GridGenerator/utilities/math/CudaMath.cu
@@ -46,3 +46,4 @@ HOSTDEVICE real CudaMath::acosReal(const real& val)
 #endif
 }
 
+
diff --git a/src/GridGenerator/utilities/math/CudaMath.cuh b/src/GridGenerator/utilities/math/CudaMath.cuh
index b725f98ac16d470efad400315bdb45df06b854d7..99986142eb7224a0a6ecb613128094a5946776ed 100644
--- a/src/GridGenerator/utilities/math/CudaMath.cuh
+++ b/src/GridGenerator/utilities/math/CudaMath.cuh
@@ -10,14 +10,20 @@
 
 #define EPSILON FLT_EPSILON
 
-struct VF_PUBLIC CudaMath
+class VF_PUBLIC CudaMath
 {
+public:
 	HOSTDEVICE static bool equal(const real& val1, const real& val2, real maxRelDiff = EPSILON);
 	HOSTDEVICE static bool lessEqual(const real& val1, const real& val2, real maxRelDiff = EPSILON);
 	HOSTDEVICE static bool greaterEqual(const real& val1, const real& val2, real maxRelDiff = EPSILON);
 
 	HOSTDEVICE static real sqrtReal(const real& val);
 	HOSTDEVICE static real acosReal(const real& val);
+    
+    HOSTDEVICE static real getDecimalPart(real number) {
+        return number - real(int(number));
+    }
+
 
 };
 
diff --git a/src/GridGenerator/utilities/math/CudaMathTest.cpp b/src/GridGenerator/utilities/math/CudaMathTest.cpp
index 9b5f155e9007348806dff28aa15df92f72c67b96..736190cf2d4c5b34831046728028ec217fdb4ec8 100644
--- a/src/GridGenerator/utilities/math/CudaMathTest.cpp
+++ b/src/GridGenerator/utilities/math/CudaMathTest.cpp
@@ -10,6 +10,10 @@ public:
 	}
 };
 
+TEST_F(CudaMathTest, getDecimalPart) {
+    ASSERT_THAT(CudaMath::getDecimalPart(2.23232), RealEq(0.23232));
+}
+
 TEST_F(CudaMathTest, compareBigValues) {
 	ASSERT_TRUE(CudaMath::equal(10000000.0f, 10000001.0f));
 	ASSERT_TRUE(CudaMath::equal(10000001.0f, 10000000.0f));
diff --git a/src/GridGenerator/utilities/transformator/Serialization/TransformatorMementoTest.cpp b/src/GridGenerator/utilities/transformator/Serialization/TransformatorMementoTest.cpp
index bba6dcf15a09f9b953ab15a1913fda8d3e15e853..9ff059e632d9b969ef99808fc0b44752ce823e81 100644
--- a/src/GridGenerator/utilities/transformator/Serialization/TransformatorMementoTest.cpp
+++ b/src/GridGenerator/utilities/transformator/Serialization/TransformatorMementoTest.cpp
@@ -4,7 +4,7 @@
 //#include <fstream>
 //
 //#include <GridGenerator/geometries/BoundingBox/Serialization/BoundingBoxMemento.h>
-//#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
+//#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
 //
 //#include <boost/archive/text_iarchive.hpp>
 //#include <boost/archive/text_oarchive.hpp>
diff --git a/src/GridGenerator/utilities/transformator/TransformatorImp.cpp b/src/GridGenerator/utilities/transformator/TransformatorImp.cpp
index 99b284a944774a6164199609a9cbecedbfe55e0a..487a508636c654b62092ea175f0efc0720abc105 100644
--- a/src/GridGenerator/utilities/transformator/TransformatorImp.cpp
+++ b/src/GridGenerator/utilities/transformator/TransformatorImp.cpp
@@ -1,7 +1,7 @@
 #include "TransformatorImp.h"
 #include <memory>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh>
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
+#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
 #include <GridGenerator/geometries/TriangularMesh/TriangularMesh.h>
 #include <GridGenerator/geometries/Vertex/Vertex.cuh>
 #include <GridGenerator/geometries/Arrow/Arrow.h>
diff --git a/src/GridGenerator/utilities/transformator/TransformatorMocks.h b/src/GridGenerator/utilities/transformator/TransformatorMocks.h
index 5135b575b38a88e270a1f638181a3fd0ee053846..8b89281f27d4075e5e83779fe1aa2eaff8d53a5b 100644
--- a/src/GridGenerator/utilities/transformator/TransformatorMocks.h
+++ b/src/GridGenerator/utilities/transformator/TransformatorMocks.h
@@ -9,8 +9,8 @@
 #include "Transformator.h"
 
 #include <geometries/Vertex/Vertex.cuh>
-#include <geometries/Triangle/Triangle.cuh>
-#include <geometries/BoundingBox/BoundingBox.cuh>
+#include <geometries/Triangle/Triangle.h>
+#include <geometries/BoundingBox/BoundingBox.h>
 #include <geometries/TriangularMesh/TriangularMesh.h>
 
 class TransformatorStub : public Transformator
diff --git a/src/GridGenerator/utilities/transformator/TransformatorTest.cpp b/src/GridGenerator/utilities/transformator/TransformatorTest.cpp
index db1ca4f9114b9802b740612a9ae93381b9a07a96..73118d4c4c62c788577e2498263c0b5258efc0a8 100644
--- a/src/GridGenerator/utilities/transformator/TransformatorTest.cpp
+++ b/src/GridGenerator/utilities/transformator/TransformatorTest.cpp
@@ -5,7 +5,7 @@
 using namespace testing;
 
 #include <GridGenerator/geometries/Vertex/Vertex.cuh>
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
 #include <GridGenerator/geometries/TriangularMesh/TriangularMesh.h>
 
 #include <GridGenerator/geometries/Arrow/ArrowMocks.h>
diff --git a/src/GridGenerator/utilities/triangleNeighborFinder/TriangleNeighborFinder.cpp b/src/GridGenerator/utilities/triangleNeighborFinder/TriangleNeighborFinder.cpp
index 9fb55e3c9e22b7ea5eee8604461e0a8dec7a8a77..deb7f9787849f502d7d4a1c1aa9069588c94669c 100644
--- a/src/GridGenerator/utilities/triangleNeighborFinder/TriangleNeighborFinder.cpp
+++ b/src/GridGenerator/utilities/triangleNeighborFinder/TriangleNeighborFinder.cpp
@@ -1,7 +1,7 @@
 #include "TriangleNeighborFinder.h"
 #include <omp.h>
 
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
 #include <GridGenerator/geometries/TriangularMesh/TriangularMesh.h>
 
 struct IDS {
diff --git a/src/GridGenerator/utilities/triangleNeighborFinder/TriangleNeighborFinderTest.cpp b/src/GridGenerator/utilities/triangleNeighborFinder/TriangleNeighborFinderTest.cpp
index da3f77cedeed1854d69e0a8b65920dac65b525f9..e800b913037936b424e325f431480429a400b259 100644
--- a/src/GridGenerator/utilities/triangleNeighborFinder/TriangleNeighborFinderTest.cpp
+++ b/src/GridGenerator/utilities/triangleNeighborFinder/TriangleNeighborFinderTest.cpp
@@ -3,7 +3,7 @@
 
 #include "gmock/gmock.h"
 
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
 #include "TriangleNeighborFinder.h"
 #include <GridGenerator/utilities/Transformator/Transformator.h>
 
diff --git a/src/GridGenerator/utilities/triangleRefinement/TriangleRefinement.cpp b/src/GridGenerator/utilities/triangleRefinement/TriangleRefinement.cpp
index e21eb1561b6e810981100b79eff18ae7bee5c260..d979839251d3e3efc2d610c29a5323f9560a6611 100644
--- a/src/GridGenerator/utilities/triangleRefinement/TriangleRefinement.cpp
+++ b/src/GridGenerator/utilities/triangleRefinement/TriangleRefinement.cpp
@@ -1,6 +1,6 @@
 #include "TriangleRefinement.h"
 
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
 
 TriangleRefinement::TriangleRefinement(std::vector<Triangle> *triangles)
 {
diff --git a/src/GridGenerator/utilities/triangleRefinement/TriangleRefinementTest.cpp b/src/GridGenerator/utilities/triangleRefinement/TriangleRefinementTest.cpp
index 2b252d5e664c088dea0c4965d9d66e26b9f6daf5..d03aea8be369ba65bd712332fad7157bb4f6c988 100644
--- a/src/GridGenerator/utilities/triangleRefinement/TriangleRefinementTest.cpp
+++ b/src/GridGenerator/utilities/triangleRefinement/TriangleRefinementTest.cpp
@@ -3,7 +3,7 @@
 
 #include "gmock/gmock.h"
 #include <GridGenerator/geometries/Vertex/Vertex.cuh>
-#include <GridGenerator/geometries/Triangle/Triangle.cuh>
+#include <GridGenerator/geometries/Triangle/Triangle.h>
 #include "TriangleRefinement.h"
 #include <GridGenerator/utilities/triangleNeighborFinder/TriangleNeighborFinder.h>
 #include <GridGenerator/io/GridVTKWriter/GridVTKWriter.h>
diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp
index 6777cdb30a6460b3689ebb4a50ce704109949cc7..fdc8a65cf93c6c830a04c1a29924bbd7244099dc 100644
--- a/targets/apps/HULC/main.cpp
+++ b/targets/apps/HULC/main.cpp
@@ -30,6 +30,7 @@
 #include "grid/GridStrategy/GridStrategyMocks.h"
 #include "VirtualFluidsBasics/utilities/logger/Logger.h"
 #include "geometries/Conglomerate/Conglomerate.h"
+#include "io/STLReaderWriter/STLReader.h"
 
 
 std::string getGridPath(std::shared_ptr<Parameter> para, std::string Gridpath)
@@ -247,14 +248,17 @@ void multipleLevel(const std::string& configPath)
     gridFactory->setGrid("grid");
     //auto gridBuilderlevel = LevelGridBuilder::makeShared(Device::CPU, "D3Q27");
     auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory);
-    gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 40.0, 40.0, 40.0, 1.0);
+    gridBuilder->addCoarseGrid(-5.0, -5.0, -5.0, 40.0, 40.0, 40.0, 1.0);
 
-    Conglomerate* conglomerate = new Conglomerate();
-    conglomerate->add(new Cuboid(10, 10, 10, 30, 30, 30));
-    conglomerate->subtract(new Sphere(30, 20, 20, 4));
+    //Conglomerate* conglomerate = new Conglomerate();
+    //conglomerate->add(new Cuboid(10, 10, 10, 30, 30, 30));
+    //conglomerate->subtract(new Sphere(30, 20, 20, 4));
+    //gridBuilder->addGrid(conglomerate, 2);
+
+    TriangularMesh* triangularMesh = STLReader::makeTriangularMesh("D:/GRIDGENERATION/STL/quadarBinaer.stl");
 
     //gridBuilder->addGrid(new Sphere(20, 20, 20, 8));
-    gridBuilder->addGrid(conglomerate, 2);
+    gridBuilder->addGrid(triangularMesh);
 
     //gridBuilder->addFineGrid(new Cuboid(15, 15, 15, 25, 25, 25), 1);
     //gridBuilder->addFineGrid(new Cuboid(17, 17, 17, 23, 23, 23), 2);
@@ -270,7 +274,7 @@ void multipleLevel(const std::string& configPath)
 
     gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_0", 0);
     gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_1", 1);
-    gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_2", 2);
+    //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_2", 2);
 
     //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestCuboid_level_0", 0);
     //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestCuboid_level_1", 1);