diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
index 59f45be60ac12ad7225ac030658c349013e9ab3b..6c1c0e2b0ef81a21ca3e268a209a771e616eca18 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
@@ -166,33 +166,7 @@ void GridGenerator::allocArrays_BoundaryQs()
         real* QQ = para->getParH()->pressureBC.q27[0];
         unsigned int sizeQ = para->getParH()->pressureBC.numberOfBCnodes;
         QforBoundaryConditions Q;
-        Q.q27[E] = &QQ[E   *sizeQ];
-        Q.q27[W] = &QQ[W   *sizeQ];
-        Q.q27[N] = &QQ[N   *sizeQ];
-        Q.q27[S] = &QQ[S   *sizeQ];
-        Q.q27[T] = &QQ[T   *sizeQ];
-        Q.q27[B] = &QQ[B   *sizeQ];
-        Q.q27[NE] = &QQ[NE  *sizeQ];
-        Q.q27[SW] = &QQ[SW  *sizeQ];
-        Q.q27[SE] = &QQ[SE  *sizeQ];
-        Q.q27[NW] = &QQ[NW  *sizeQ];
-        Q.q27[TE] = &QQ[TE  *sizeQ];
-        Q.q27[BW] = &QQ[BW  *sizeQ];
-        Q.q27[BE] = &QQ[BE  *sizeQ];
-        Q.q27[TW] = &QQ[TW  *sizeQ];
-        Q.q27[TN] = &QQ[TN  *sizeQ];
-        Q.q27[BS] = &QQ[BS  *sizeQ];
-        Q.q27[BN] = &QQ[BN  *sizeQ];
-        Q.q27[TS] = &QQ[TS  *sizeQ];
-        Q.q27[REST] = &QQ[REST*sizeQ];
-        Q.q27[TNE] = &QQ[TNE *sizeQ];
-        Q.q27[TSW] = &QQ[TSW *sizeQ];
-        Q.q27[TSE] = &QQ[TSE *sizeQ];
-        Q.q27[TNW] = &QQ[TNW *sizeQ];
-        Q.q27[BNE] = &QQ[BNE *sizeQ];
-        Q.q27[BSW] = &QQ[BSW *sizeQ];
-        Q.q27[BSE] = &QQ[BSE *sizeQ];
-        Q.q27[BNW] = &QQ[BNW *sizeQ];
+        getPointersToBoundaryConditions(Q, QQ, sizeQ);
 
         builder->getPressureQs(Q.q27, 0);
 
@@ -208,33 +182,7 @@ void GridGenerator::allocArrays_BoundaryQs()
         real *QQ           = para->getParH()->slipBC.q27[0];
         unsigned int sizeQ = para->getParH()->slipBC.numberOfBCnodes;
         QforBoundaryConditions Q;
-        Q.q27[E]    = &QQ[E * sizeQ];
-        Q.q27[W]    = &QQ[W * sizeQ];
-        Q.q27[N]    = &QQ[N * sizeQ];
-        Q.q27[S]    = &QQ[S * sizeQ];
-        Q.q27[T]    = &QQ[T * sizeQ];
-        Q.q27[B]    = &QQ[B * sizeQ];
-        Q.q27[NE]   = &QQ[NE * sizeQ];
-        Q.q27[SW]   = &QQ[SW * sizeQ];
-        Q.q27[SE]   = &QQ[SE * sizeQ];
-        Q.q27[NW]   = &QQ[NW * sizeQ];
-        Q.q27[TE]   = &QQ[TE * sizeQ];
-        Q.q27[BW]   = &QQ[BW * sizeQ];
-        Q.q27[BE]   = &QQ[BE * sizeQ];
-        Q.q27[TW]   = &QQ[TW * sizeQ];
-        Q.q27[TN]   = &QQ[TN * sizeQ];
-        Q.q27[BS]   = &QQ[BS * sizeQ];
-        Q.q27[BN]   = &QQ[BN * sizeQ];
-        Q.q27[TS]   = &QQ[TS * sizeQ];
-        Q.q27[REST] = &QQ[REST * sizeQ];
-        Q.q27[TNE]  = &QQ[TNE * sizeQ];
-        Q.q27[TSW]  = &QQ[TSW * sizeQ];
-        Q.q27[TSE]  = &QQ[TSE * sizeQ];
-        Q.q27[TNW]  = &QQ[TNW * sizeQ];
-        Q.q27[BNE]  = &QQ[BNE * sizeQ];
-        Q.q27[BSW]  = &QQ[BSW * sizeQ];
-        Q.q27[BSE]  = &QQ[BSE * sizeQ];
-        Q.q27[BNW]  = &QQ[BNW * sizeQ];
+        getPointersToBoundaryConditions(Q, QQ, sizeQ);
 
         builder->getSlipQs(Q.q27, 0);
 
@@ -250,33 +198,7 @@ void GridGenerator::allocArrays_BoundaryQs()
         real *QQ           = para->getParH()->velocityBC.q27[0];
         unsigned int sizeQ = para->getParH()->velocityBC.numberOfBCnodes;
         QforBoundaryConditions Q;
-        Q.q27[E]    = &QQ[E * sizeQ];
-        Q.q27[W]    = &QQ[W * sizeQ];
-        Q.q27[N]    = &QQ[N * sizeQ];
-        Q.q27[S]    = &QQ[S * sizeQ];
-        Q.q27[T]    = &QQ[T * sizeQ];
-        Q.q27[B]    = &QQ[B * sizeQ];
-        Q.q27[NE]   = &QQ[NE * sizeQ];
-        Q.q27[SW]   = &QQ[SW * sizeQ];
-        Q.q27[SE]   = &QQ[SE * sizeQ];
-        Q.q27[NW]   = &QQ[NW * sizeQ];
-        Q.q27[TE]   = &QQ[TE * sizeQ];
-        Q.q27[BW]   = &QQ[BW * sizeQ];
-        Q.q27[BE]   = &QQ[BE * sizeQ];
-        Q.q27[TW]   = &QQ[TW * sizeQ];
-        Q.q27[TN]   = &QQ[TN * sizeQ];
-        Q.q27[BS]   = &QQ[BS * sizeQ];
-        Q.q27[BN]   = &QQ[BN * sizeQ];
-        Q.q27[TS]   = &QQ[TS * sizeQ];
-        Q.q27[REST] = &QQ[REST * sizeQ];
-        Q.q27[TNE]  = &QQ[TNE * sizeQ];
-        Q.q27[TSW]  = &QQ[TSW * sizeQ];
-        Q.q27[TSE]  = &QQ[TSE * sizeQ];
-        Q.q27[TNW]  = &QQ[TNW * sizeQ];
-        Q.q27[BNE]  = &QQ[BNE * sizeQ];
-        Q.q27[BSW]  = &QQ[BSW * sizeQ];
-        Q.q27[BSE]  = &QQ[BSE * sizeQ];
-        Q.q27[BNW]  = &QQ[BNW * sizeQ];
+        getPointersToBoundaryConditions(Q, QQ, sizeQ);
 
         builder->getVelocityQs(Q.q27, 0);
 
@@ -301,33 +223,7 @@ void GridGenerator::allocArrays_BoundaryQs()
         real* QQ = para->getParH()->geometryBC.q27[0];
         unsigned int sizeQ = para->getParH()->geometryBC.numberOfBCnodes;
         QforBoundaryConditions Q;
-        Q.q27[E] = &QQ[E   *sizeQ];
-        Q.q27[W] = &QQ[W   *sizeQ];
-        Q.q27[N] = &QQ[N   *sizeQ];
-        Q.q27[S] = &QQ[S   *sizeQ];
-        Q.q27[T] = &QQ[T   *sizeQ];
-        Q.q27[B] = &QQ[B   *sizeQ];
-        Q.q27[NE] = &QQ[NE  *sizeQ];
-        Q.q27[SW] = &QQ[SW  *sizeQ];
-        Q.q27[SE] = &QQ[SE  *sizeQ];
-        Q.q27[NW] = &QQ[NW  *sizeQ];
-        Q.q27[TE] = &QQ[TE  *sizeQ];
-        Q.q27[BW] = &QQ[BW  *sizeQ];
-        Q.q27[BE] = &QQ[BE  *sizeQ];
-        Q.q27[TW] = &QQ[TW  *sizeQ];
-        Q.q27[TN] = &QQ[TN  *sizeQ];
-        Q.q27[BS] = &QQ[BS  *sizeQ];
-        Q.q27[BN] = &QQ[BN  *sizeQ];
-        Q.q27[TS] = &QQ[TS  *sizeQ];
-        Q.q27[REST] = &QQ[REST*sizeQ];
-        Q.q27[TNE] = &QQ[TNE *sizeQ];
-        Q.q27[TSW] = &QQ[TSW *sizeQ];
-        Q.q27[TSE] = &QQ[TSE *sizeQ];
-        Q.q27[TNW] = &QQ[TNW *sizeQ];
-        Q.q27[BNE] = &QQ[BNE *sizeQ];
-        Q.q27[BSW] = &QQ[BSW *sizeQ];
-        Q.q27[BSE] = &QQ[BSE *sizeQ];
-        Q.q27[BNW] = &QQ[BNW *sizeQ];
+        getPointersToBoundaryConditions(Q, QQ, sizeQ);
         
         builder->getGeometryQs(Q.q27,0);
         
@@ -418,3 +314,33 @@ std::string GridGenerator::checkNeighbor(real x, real y, real z, int index, int
     }
     return oss.str();
 }
+
+void GridGenerator::getPointersToBoundaryConditions(QforBoundaryConditions& boundaryConditionStruct, real* subgridDistances, const unsigned int numberOfBCnodes){
+    boundaryConditionStruct.q27[E] =    &subgridDistances[E   * numberOfBCnodes];
+    boundaryConditionStruct.q27[W] =    &subgridDistances[W   * numberOfBCnodes];
+    boundaryConditionStruct.q27[N] =    &subgridDistances[N   * numberOfBCnodes];
+    boundaryConditionStruct.q27[S] =    &subgridDistances[S   * numberOfBCnodes];
+    boundaryConditionStruct.q27[T] =    &subgridDistances[T   * numberOfBCnodes];
+    boundaryConditionStruct.q27[B] =    &subgridDistances[B   * numberOfBCnodes];
+    boundaryConditionStruct.q27[NE] =   &subgridDistances[NE  * numberOfBCnodes];
+    boundaryConditionStruct.q27[SW] =   &subgridDistances[SW  * numberOfBCnodes];
+    boundaryConditionStruct.q27[SE] =   &subgridDistances[SE  * numberOfBCnodes];
+    boundaryConditionStruct.q27[NW] =   &subgridDistances[NW  * numberOfBCnodes];
+    boundaryConditionStruct.q27[TE] =   &subgridDistances[TE  * numberOfBCnodes];
+    boundaryConditionStruct.q27[BW] =   &subgridDistances[BW  * numberOfBCnodes];
+    boundaryConditionStruct.q27[BE] =   &subgridDistances[BE  * numberOfBCnodes];
+    boundaryConditionStruct.q27[TW] =   &subgridDistances[TW  * numberOfBCnodes];
+    boundaryConditionStruct.q27[TN] =   &subgridDistances[TN  * numberOfBCnodes];
+    boundaryConditionStruct.q27[BS] =   &subgridDistances[BS  * numberOfBCnodes];
+    boundaryConditionStruct.q27[BN] =   &subgridDistances[BN  * numberOfBCnodes];
+    boundaryConditionStruct.q27[TS] =   &subgridDistances[TS  * numberOfBCnodes];
+    boundaryConditionStruct.q27[REST] = &subgridDistances[REST* numberOfBCnodes];
+    boundaryConditionStruct.q27[TNE] =  &subgridDistances[TNE * numberOfBCnodes];
+    boundaryConditionStruct.q27[TSW] =  &subgridDistances[TSW * numberOfBCnodes];
+    boundaryConditionStruct.q27[TSE] =  &subgridDistances[TSE * numberOfBCnodes];
+    boundaryConditionStruct.q27[TNW] =  &subgridDistances[TNW * numberOfBCnodes];
+    boundaryConditionStruct.q27[BNE] =  &subgridDistances[BNE * numberOfBCnodes];
+    boundaryConditionStruct.q27[BSW] =  &subgridDistances[BSW * numberOfBCnodes];
+    boundaryConditionStruct.q27[BSE] =  &subgridDistances[BSE * numberOfBCnodes];
+    boundaryConditionStruct.q27[BNW] =  &subgridDistances[BNW * numberOfBCnodes];
+}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
index 20ad11f5a4f958473febb242723dc16d889315ad..7777f5e60731a29bbdba1b19d490ba43e96f7080 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
@@ -83,11 +83,16 @@ private:
 	std::string verifyNeighborIndex(int index, int &invalidNodes, int &stopperNodes, int &wrongNeighbors) const;
 	//! \brief check the neighbors
 	//! \param x,y,z lattice node position
-	//! \param numberOfWrongNeihgbors reference to the number of wrong neighbors
+	//! \param numberOfWrongNeighbors reference to the number of wrong neighbors
 	//! \param neighborIndex index of neighbor node
 	//! \param neighborX,neighborY,neighborZ neighbor lattice node position
 	//! \param direction type string
 	std::string checkNeighbor(real x, real y, real z, int index, int& numberOfWrongNeihgbors, int neighborIndex, real neighborX, real neighborY, real neighborZ, std::string direction) const;
+	//! \brief create the pointers in the struct for the BoundaryConditions from the boundary condition array
+	//! \param boundaryConditionStruct is a struct containing information about the boundary condition
+	//! \param subgridDistances is a pointer to an array containing the subgrid distances
+	//! \param numberOfBCnodes is the number of lattice nodes in the boundary condition
+	static void getPointersToBoundaryConditions(QforBoundaryConditions& boundaryConditionStruct, real* subgridDistances, const unsigned int numberOfBCnodes);
 };
 
 #endif