diff --git a/.gitignore b/.gitignore
index 182a78aa1f85b2b69ac85452b2d87fbd87e68e56..285f67f351ae8abf4d088f0364417b2f55d4883d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,10 +16,17 @@ __pycache__/
 .devcontainer/
 .sync/
 .idea/
+.vscode-server
 
 # Simulation results
 output/
 logs/
 
+# Input files
+stl/
+
+# Scripts
+scripts/
+
 # MacOS
 .DS_Store
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ef024170265d9270d192e12f6b301224355f9ac3..d7aae3233d1f17e804e29ba3090d7a3bc9ca8a3f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -170,7 +170,9 @@ endif()
 
 if(BUILD_USE_MPI)
     find_package(MPI REQUIRED)
-    list(APPEND VF_COMPILER_DEFINITION VF_MPI)
+    if(BUILD_VF_CPU)
+        list(APPEND VF_COMPILER_DEFINITION VF_MPI)
+    endif()
 endif()
 
 # boost
diff --git a/src/gpu/GridGenerator/grid/GridImp.cpp b/src/gpu/GridGenerator/grid/GridImp.cpp
index e2c16f578854b4138514554213f6dee1f7a3e2c1..7eda4f9b8e5a374347b8572f3a28a947be5ad9cb 100644
--- a/src/gpu/GridGenerator/grid/GridImp.cpp
+++ b/src/gpu/GridGenerator/grid/GridImp.cpp
@@ -868,6 +868,7 @@ void GridImp::findSparseIndices(SPtr<Grid> finerGrid)
 
     if (fineGrid) {
         fineGrid->updateSparseIndices();
+        this->findForGridInterfaceNewIndices(fineGrid);
     }
 
     const uint newGridSize = this->getSparseSize();
@@ -875,6 +876,16 @@ void GridImp::findSparseIndices(SPtr<Grid> finerGrid)
                   << ", delete nodes:" << this->getSize() - newGridSize << "\n";
 }
 
+void GridImp::findForGridInterfaceNewIndices(SPtr<GridImp> fineGrid)
+{
+#pragma omp parallel for
+    for (int index = 0; index < (int)this->getNumberOfNodesCF(); index++)
+        this->gridInterface->findForGridInterfaceSparseIndexCF(this, fineGrid.get(), index);
+
+#pragma omp parallel for
+    for (int index = 0; index < (int)this->getNumberOfNodesFC(); index++)
+        this->gridInterface->findForGridInterfaceSparseIndexFC(this, fineGrid.get(), index);
+}
 
 void GridImp::updateSparseIndices()
 {
diff --git a/src/gpu/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h
index 4a8aa1535187fe0bf69fed7b653a4c05d46d99e7..b096f5ff85dcd725ff065dbb6fc31d75c016c869 100644
--- a/src/gpu/GridGenerator/grid/GridImp.h
+++ b/src/gpu/GridGenerator/grid/GridImp.h
@@ -53,19 +53,19 @@ class BoundingBox;
 class TriangularMeshDiscretizationStrategy;
 
 #ifdef __GNUC__
-#ifndef __clang__
-#pragma push
-#pragma diag_suppress = 3156
-#endif
+    #ifndef __clang__
+        #pragma push
+        #pragma diag_suppress = 3156
+    #endif
 #endif
 
 // GCC:  warning #3156-D: extern declaration of the entity DIRECTIONS is treated as a static definition
 extern int DIRECTIONS[DIR_END_MAX][DIMENSION];
 
 #ifdef __GNUC__
-#ifndef __clang__
-#pragma pop
-#endif
+    #ifndef __clang__
+        #pragma pop
+    #endif
 #endif
 
 class GRIDGENERATOR_EXPORT GridImp : public enableSharedFromThis<GridImp>, public Grid
@@ -247,6 +247,7 @@ public:
     uint getNumberOfNodesCF() const override;
     uint getNumberOfNodesFC() const override;
     void getGridInterfaceIndices(uint *iCellCfc, uint *iCellCff, uint *iCellFcc, uint *iCellFcf) const override;
+
     static void getGridInterface(uint *gridInterfaceList, const uint *oldGridInterfaceList, uint size);
 
     int *getNeighborsX() const override;
@@ -267,6 +268,7 @@ public:
 public:
     virtual void findSparseIndices(SPtr<Grid> fineGrid) override;
 
+    void findForGridInterfaceNewIndices(SPtr<GridImp> fineGrid);
     void updateSparseIndices();
     void setNeighborIndices(uint index);
     real getFirstFluidNode(real coords[3], int direction, real startCoord) const override;
@@ -305,7 +307,11 @@ public:
     void findQsPrimitive(Object *object);
 
 private:
-    enum class qComputationStageType { FindSolidBoundaryNodes, ComputeQs } qComputationStage;
+
+    enum class qComputationStageType{
+        FindSolidBoundaryNodes,
+        ComputeQs
+    } qComputationStage;
 
 public:
     void enableFindSolidBoundaryNodes() override