From 1553a26e20fef7bbb19b4d6355cceb09eae2b654 Mon Sep 17 00:00:00 2001
From: Anna Wellmann <a.wellmann@tu-bs.de>
Date: Fri, 8 Apr 2022 16:20:39 +0200
Subject: [PATCH] Reformat InterfaceDebugWriter with clang-format

---
 .../Output/InterfaceDebugWriter.hpp           | 1694 ++++++++---------
 1 file changed, 816 insertions(+), 878 deletions(-)

diff --git a/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.hpp
index 66b59324f..7e87fb446 100644
--- a/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.hpp
@@ -1,959 +1,897 @@
 #ifndef INTERFACEDEBUG_HPP
 #define INTERFACEDEBUG_HPP
 
-#include <stdio.h>
 #include <fstream>
 #include <sstream>
+#include <stdio.h>
 // #include <math.h>
-#include <cmath>
-#include "LBM/LB.h"
+#include "Core/StringUtilities/StringUtil.h"
 #include "LBM/D3Q27.h"
+#include "LBM/LB.h"
 #include "Parameter/Parameter.h"
 #include "basics/utilities/UbSystem.h"
-#include "Core/StringUtilities/StringUtil.h"
 #include <basics/writer/WbWriterVtkXmlBinary.h>
+#include <cmath>
 
 #include "VirtualFluids_GPU/Communication/Communicator.h"
 
 namespace InterfaceDebugWriter
 {
 
-    void writeGridInterfaceLines(Parameter* para, int level, const uint* coarse, const uint* fine, uint numberOfNodes, const std::string& name)
+void writeGridInterfaceLines(Parameter *para, int level, const uint *coarse, const uint *fine, uint numberOfNodes,
+                             const std::string &name)
+{
+    std::vector<UbTupleFloat3> nodes(numberOfNodes * 2);
+    std::vector<UbTupleInt2> cells(numberOfNodes);
+
+    int actualNodeNumber = 0;
+    for (uint u = 0; u < numberOfNodes; u++) {
+        const int posCoarse   = coarse[u];
+        const double x1Coarse = para->getParH(level)->coordX_SP[posCoarse];
+        const double x2Coarse = para->getParH(level)->coordY_SP[posCoarse];
+        const double x3Coarse = para->getParH(level)->coordZ_SP[posCoarse];
+
+        const int posFine   = fine[u];
+        const double x1Fine = para->getParH(level + 1)->coordX_SP[posFine];
+        const double x2Fine = para->getParH(level + 1)->coordY_SP[posFine];
+        const double x3Fine = para->getParH(level + 1)->coordZ_SP[posFine];
+
+        nodes[actualNodeNumber++] = makeUbTuple(float(x1Coarse), float(x2Coarse), float(x3Coarse));
+        nodes[actualNodeNumber++] = makeUbTuple(float(x1Fine), float(x2Fine), float(x3Fine));
+
+        cells[u] = makeUbTuple(actualNodeNumber - 2, actualNodeNumber - 1);
+    }
+    WbWriterVtkXmlBinary::getInstance()->writeLines(name, nodes, cells);
+}
+
+void writeInterfaceLinesDebugCF(Parameter *para)
+{
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        const std::string fileName = para->getFName() + "_" + StringUtil::toString<int>(level) + "_OffDebugCF.vtk";
+        writeGridInterfaceLines(para, level, para->getParH(level)->intCF.ICellCFC, para->getParH(level)->intCF.ICellCFF,
+                                para->getParH(level)->K_CF, fileName);
+    }
+}
+
+void writeInterfaceLinesDebugFC(Parameter *para)
+{
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        const std::string fileName = para->getFName() + "_" + StringUtil::toString<int>(level) + "_OffDebugFC.vtk";
+        writeGridInterfaceLines(para, level, para->getParH(level)->intFC.ICellFCC, para->getParH(level)->intFC.ICellFCF,
+                                para->getParH(level)->K_FC, fileName);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+void writeGridInterfaceLinesNeighbors(Parameter *para, int level, const uint *interfaceIndices, uint numberOfNodes,
+                                      const std::string &name)
+{
+    std::vector<UbTupleFloat3> nodes(numberOfNodes * 2);
+    std::vector<UbTupleInt2> cells(numberOfNodes);
+
+    int actualNodeNumber = 0;
+    for (uint u = 0; u < numberOfNodes; u++) {
+        const int pos   = interfaceIndices[u];
+        const double x1 = para->getParH(level)->coordX_SP[pos];
+        const double x2 = para->getParH(level)->coordY_SP[pos];
+        const double x3 = para->getParH(level)->coordZ_SP[pos];
+
+        const double x1Neighbor = para->getParH(level)->coordX_SP[para->getParH(level)->neighborX_SP[pos]];
+        const double x2Neighbor = para->getParH(level)->coordY_SP[para->getParH(level)->neighborY_SP[pos]];
+        const double x3Neighbor = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborZ_SP[pos]];
+
+        nodes[actualNodeNumber++] = (makeUbTuple(float(x1), float(x2), float(x3)));
+        nodes[actualNodeNumber++] = (makeUbTuple(float(x1Neighbor), float(x2Neighbor), float(x3Neighbor)));
+
+        cells[u] = makeUbTuple(actualNodeNumber - 2, actualNodeNumber - 1);
+    }
+    WbWriterVtkXmlBinary::getInstance()->writeLines(name, nodes, cells);
+}
+
+void writeInterfaceLinesDebugCFCneighbor(Parameter *para)
+{
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        std::string filename = para->getFName() + "_" + StringUtil::toString<int>(level) + "_CFCneighbor.vtk";
+        writeGridInterfaceLinesNeighbors(para, level, para->getParH(level)->intCF.ICellCFC, para->getParH(level)->K_CF,
+                                         filename);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+void writeInterfaceLinesDebugCFFneighbor(Parameter *para)
+{
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        std::string filename = para->getFName() + "_" + StringUtil::toString<int>(level) + "_CFFneighbor.vtk";
+        writeGridInterfaceLinesNeighbors(para, level + 1, para->getParH(level)->intCF.ICellCFF,
+                                         para->getParH(level)->K_CF, filename);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+void writeInterfaceLinesDebugFCCneighbor(Parameter *para)
+{
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        std::string filename = para->getFName() + "_" + StringUtil::toString<int>(level) + "_FCCneighbor.vtk";
+        writeGridInterfaceLinesNeighbors(para, level, para->getParH(level)->intFC.ICellFCC, para->getParH(level)->K_FC,
+                                         filename);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+void writeInterfaceLinesDebugFCFneighbor(Parameter *para)
+{
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        std::string filename = para->getFName() + "_" + StringUtil::toString<int>(level) + "_FCFneighbor.vtk";
+        writeGridInterfaceLinesNeighbors(para, level + 1, para->getParH(level)->intFC.ICellFCF,
+                                         para->getParH(level)->K_FC, filename);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+void writeInterfaceLinesDebugOff(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    std::vector<UbTupleInt2> cellsVec;
+    int nodeNumberVec = 0;
+
+    for (int level = 0; level < para->getMaxLevel(); level++) // evtl. Maxlevel + 1
+    {
+        nodeNumberVec += (int)para->getParH(level)->K_CF;
+    }
+    nodesVec.resize(nodeNumberVec * 8);
+    int nodeCount = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->K_CF; u++) {
+            double xoff = para->getParH(level)->offCF.xOffCF[u];
+            double yoff = para->getParH(level)->offCF.yOffCF[u];
+            double zoff = para->getParH(level)->offCF.zOffCF[u];
+
+            int posFine = para->getParH(level)->intCF.ICellCFF[u];
+
+            double x1Fine = para->getParH(level + 1)->coordX_SP[posFine];
+            double x2Fine = para->getParH(level + 1)->coordY_SP[posFine];
+            double x3Fine = para->getParH(level + 1)->coordZ_SP[posFine];
+
+            double x1 = x1Fine + xoff;
+            double x2 = x2Fine + yoff;
+            double x3 = x3Fine + zoff;
+
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1Fine), (float)(x2Fine), (float)(x3Fine)));
+
+            cellsVec.push_back(makeUbTuple(nodeCount - 2, nodeCount - 1));
+        }
+        std::string filenameVec = para->getFName() + "_" + StringUtil::toString<int>(level) + "_OffDebugCF_Offs.vtk";
+        WbWriterVtkXmlBinary::getInstance()->writeLines(filenameVec, nodesVec, cellsVec);
+        cellsVec.clear();
+        nodesVec.clear();
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+void writeInterfacePointsDebugCFC(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec2;
+    int nodeNumberVec = 0;
+
+    for (int level = 0; level < para->getMaxLevel(); level++) // evtl. Maxlevel + 1
     {
-        std::vector<UbTupleFloat3> nodes(numberOfNodes * 2);
-        std::vector<UbTupleInt2> cells(numberOfNodes);
-
-        int actualNodeNumber = 0;
-        for (uint u = 0; u < numberOfNodes; u++)
-        {
-            const int posCoarse = coarse[u];
-            const double x1Coarse = para->getParH(level)->coordX_SP[posCoarse];
-            const double x2Coarse = para->getParH(level)->coordY_SP[posCoarse];
-            const double x3Coarse = para->getParH(level)->coordZ_SP[posCoarse];
-
-            const int posFine = fine[u];
-            const double x1Fine = para->getParH(level + 1)->coordX_SP[posFine];
-            const double x2Fine = para->getParH(level + 1)->coordY_SP[posFine];
-            const double x3Fine = para->getParH(level + 1)->coordZ_SP[posFine];
-
-            nodes[actualNodeNumber++] = makeUbTuple(float(x1Coarse), float(x2Coarse), float(x3Coarse));
-            nodes[actualNodeNumber++] = makeUbTuple(float(x1Fine), float(x2Fine), float(x3Fine));
-
-            cells[u] = makeUbTuple(actualNodeNumber - 2, actualNodeNumber - 1);
+        nodeNumberVec += (int)para->getParH(level)->K_CF;
+    }
+    nodesVec2.resize(nodeNumberVec * 8);
+    int nodeCount2 = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->K_CF; u++) {
+            int pos = para->getParH(level)->intCF.ICellCFC[u];
+
+            double x1 = para->getParH(level)->coordX_SP[pos];
+            double x2 = para->getParH(level)->coordY_SP[pos];
+            double x3 = para->getParH(level)->coordZ_SP[pos];
+
+            nodesVec2[nodeCount2++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
         }
-        WbWriterVtkXmlBinary::getInstance()->writeLines(name, nodes, cells);
+        std::string filenameVec2 = para->getFName() + "_" + StringUtil::toString<int>(level) + "_OffDebugPointsCF.vtk";
+        WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec2, nodesVec2);
     }
+}
+
+//////////////////////////////////////////////////////////////////////////
 
+void writeBcPointsDebug(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec2;
+    int nodeNumberVec = 0;
 
-    void writeInterfaceLinesDebugCF(Parameter* para)
+    for (int level = 0; level <= para->getMaxLevel(); level++) // evtl. Maxlevel + 1
     {
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-            const std::string fileName = para->getFName() + "_" + StringUtil::toString<int>(level) + "_OffDebugCF.vtk";
-            writeGridInterfaceLines(para, level, para->getParH(level)->intCF.ICellCFC, para->getParH(level)->intCF.ICellCFF, para->getParH(level)->K_CF, fileName);
-		}
-	}
+        nodeNumberVec += (int)para->getParH(level)->QWall.kQ;
+    }
+    nodesVec2.resize(nodeNumberVec * 8);
+    int nodeCount2 = 0;
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        for (int u = 0; u < para->getParH(level)->QWall.kQ; u++) {
+            int pos = para->getParH(level)->QWall.k[u];
+
+            double x1 = para->getParH(level)->coordX_SP[pos];
+            double x2 = para->getParH(level)->coordY_SP[pos];
+            double x3 = para->getParH(level)->coordZ_SP[pos];
+
+            nodesVec2[nodeCount2++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+        }
+        std::string filenameVec2 = para->getFName() + "_PointsBc_" + StringUtil::toString<int>(level);
+        WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec2, nodesVec2);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
 
+void writePressPointsDebug(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    int nodeNumberVec = 0;
 
-	void writeInterfaceLinesDebugFC(Parameter* para)
+    for (int level = 0; level <= para->getMaxLevel(); level++) // evtl. Maxlevel + 1
     {
-        for (int level = 0; level < para->getMaxLevel(); level++)
-        {
-            const std::string fileName = para->getFName() + "_" + StringUtil::toString<int>(level) + "_OffDebugFC.vtk";
-            writeGridInterfaceLines(para, level, para->getParH(level)->intFC.ICellFCC, para->getParH(level)->intFC.ICellFCF, para->getParH(level)->K_FC, fileName);
+        nodeNumberVec += (int)para->getParH(level)->QPress.kQ;
+    }
+    nodesVec.resize(nodeNumberVec);
+    int nodeCount2 = 0;
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        for (int u = 0; u < para->getParH(level)->QPress.kQ; u++) {
+            int pos = para->getParH(level)->QPress.k[u];
+
+            double x1 = para->getParH(level)->coordX_SP[pos];
+            double x2 = para->getParH(level)->coordY_SP[pos];
+            double x3 = para->getParH(level)->coordZ_SP[pos];
+
+            nodesVec[nodeCount2++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+        }
+        std::string filenameVec = para->getFName() + "_PointsPress_" + StringUtil::toString<int>(level);
+        WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec, nodesVec);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+void writePressNeighborPointsDebug(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    int nodeNumberVec = 0;
+
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        nodeNumberVec += (int)para->getParH(level)->QPress.kQ;
+    }
+    nodesVec.resize(nodeNumberVec);
+    int nodeCount2 = 0;
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        for (int u = 0; u < para->getParH(level)->QPress.kQ; u++) {
+            int pos = para->getParH(level)->QPress.kN[u];
+
+            real x1 = para->getParH(level)->coordX_SP[pos];
+            real x2 = para->getParH(level)->coordY_SP[pos];
+            real x3 = para->getParH(level)->coordZ_SP[pos];
+
+            nodesVec[nodeCount2++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+        }
+        std::string filenameVec = para->getFName() + "_PointsPressNeighbor_" + StringUtil::toString<int>(level);
+        WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec, nodesVec);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+void writeNeighborXPointsDebug(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    int nodeNumberVec = 0;
+
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
+    }
+    nodesVec.resize(nodeNumberVec);
+    int nodeCount2 = 0;
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->size_Mat_SP; u++) {
+            real x1 = para->getParH(level)->coordX_SP[para->getParH(level)->neighborX_SP[u]];
+            real x2 = para->getParH(level)->coordY_SP[para->getParH(level)->neighborX_SP[u]];
+            real x3 = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborX_SP[u]];
+
+            nodesVec[nodeCount2++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
         }
-	}
+        std::string filenameVec = para->getFName() + "_PointsNeighborX_" + StringUtil::toString<int>(level);
+        WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec, nodesVec);
+    }
+}
 
+//////////////////////////////////////////////////////////////////////////
 
-	//////////////////////////////////////////////////////////////////////////
-    void writeGridInterfaceLinesNeighbors(Parameter* para, int level, const uint* interfaceIndices, uint numberOfNodes, const std::string& name)
+void writeNeighborXLinesDebug(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    std::vector<UbTupleInt2> cellsVec;
+    int nodeNumberVec = 0;
+
+    for (int level = 0; level < para->getMaxLevel(); level++) // evtl. Maxlevel + 1
     {
-        std::vector<UbTupleFloat3> nodes(numberOfNodes * 2);
-        std::vector<UbTupleInt2> cells(numberOfNodes);
-
-        int actualNodeNumber = 0;
-        for (uint u = 0; u < numberOfNodes; u++)
-        {
-            const int pos = interfaceIndices[u];
-            const double x1 = para->getParH(level)->coordX_SP[pos];
-            const double x2 = para->getParH(level)->coordY_SP[pos];
-            const double x3 = para->getParH(level)->coordZ_SP[pos];
-	
-            const double x1Neighbor = para->getParH(level)->coordX_SP[para->getParH(level)->neighborX_SP[pos]];
-            const double x2Neighbor = para->getParH(level)->coordY_SP[para->getParH(level)->neighborY_SP[pos]];
-            const double x3Neighbor = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborZ_SP[pos]];
-
-            nodes[actualNodeNumber++] = (makeUbTuple(float(x1), float(x2), float(x3)));
-            nodes[actualNodeNumber++] = (makeUbTuple(float(x1Neighbor), float(x2Neighbor), float(x3Neighbor)));
-
-            cells[u] = makeUbTuple(actualNodeNumber - 2, actualNodeNumber - 1);
+        nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
+    }
+    nodesVec.resize(nodeNumberVec * 2);
+    int nodeCount = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->size_Mat_SP; u++) {
+            real x1  = para->getParH(level)->coordX_SP[u];
+            real x2  = para->getParH(level)->coordY_SP[u];
+            real x3  = para->getParH(level)->coordZ_SP[u];
+            real x1N = para->getParH(level)->coordX_SP[para->getParH(level)->neighborX_SP[u]];
+            real x2N = para->getParH(level)->coordY_SP[para->getParH(level)->neighborX_SP[u]];
+            real x3N = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborX_SP[u]];
+
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1N), (float)(x2N), (float)(x3N)));
+
+            if (para->getParH(level)->geoSP[u] == GEO_FLUID) {
+                cellsVec.push_back(makeUbTuple(nodeCount - 2, nodeCount - 1));
+            }
+        }
+        std::string filenameVec = para->getFName() + "_" + StringUtil::toString<int>(level) + "_NeighborX_Lines.vtk";
+        WbWriterVtkXmlBinary::getInstance()->writeLines(filenameVec, nodesVec, cellsVec);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+void writeNeighborYPointsDebug(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    int nodeNumberVec = 0;
+
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
+    }
+    nodesVec.resize(nodeNumberVec);
+    int nodeCount2 = 0;
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->size_Mat_SP; u++) {
+            real x1 = para->getParH(level)->coordX_SP[para->getParH(level)->neighborY_SP[u]];
+            real x2 = para->getParH(level)->coordY_SP[para->getParH(level)->neighborY_SP[u]];
+            real x3 = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborY_SP[u]];
+
+            nodesVec[nodeCount2++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
         }
-        WbWriterVtkXmlBinary::getInstance()->writeLines(name, nodes, cells);
+        std::string filenameVec = para->getFName() + "_PointsNeighborY_" + StringUtil::toString<int>(level);
+        WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec, nodesVec);
     }
+}
 
-	void writeInterfaceLinesDebugCFCneighbor(Parameter* para)
+//////////////////////////////////////////////////////////////////////////
+
+void writeNeighborYLinesDebug(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    std::vector<UbTupleInt2> cellsVec;
+    int nodeNumberVec = 0;
+
+    for (int level = 0; level < para->getMaxLevel(); level++) // evtl. Maxlevel + 1
     {
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-            std::string filename = para->getFName() + "_" + StringUtil::toString<int>(level) + "_CFCneighbor.vtk";
-            writeGridInterfaceLinesNeighbors(para, level, para->getParH(level)->intCF.ICellCFC, para->getParH(level)->K_CF, filename);
-		}
-	}
+        nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
+    }
+    nodesVec.resize(nodeNumberVec * 2);
+    int nodeCount = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->size_Mat_SP; u++) {
+            real x1  = para->getParH(level)->coordX_SP[u];
+            real x2  = para->getParH(level)->coordY_SP[u];
+            real x3  = para->getParH(level)->coordZ_SP[u];
+            real x1N = para->getParH(level)->coordX_SP[para->getParH(level)->neighborY_SP[u]];
+            real x2N = para->getParH(level)->coordY_SP[para->getParH(level)->neighborY_SP[u]];
+            real x3N = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborY_SP[u]];
+
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1N), (float)(x2N), (float)(x3N)));
+
+            if (para->getParH(level)->geoSP[u] == GEO_FLUID) {
+                cellsVec.push_back(makeUbTuple(nodeCount - 2, nodeCount - 1));
+            }
+        }
+        std::string filenameVec = para->getFName() + "_" + StringUtil::toString<int>(level) + "_NeighborY_Lines.vtk";
+        WbWriterVtkXmlBinary::getInstance()->writeLines(filenameVec, nodesVec, cellsVec);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+void writeNeighborZPointsDebug(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    int nodeNumberVec = 0;
+
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
+    }
+    nodesVec.resize(nodeNumberVec);
+    int nodeCount2 = 0;
+    for (int level = 0; level <= para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->size_Mat_SP; u++) {
+            real x1 = para->getParH(level)->coordX_SP[para->getParH(level)->neighborZ_SP[u]];
+            real x2 = para->getParH(level)->coordY_SP[para->getParH(level)->neighborZ_SP[u]];
+            real x3 = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborZ_SP[u]];
+
+            nodesVec[nodeCount2++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+        }
+        std::string filenameVec = para->getFName() + "_PointsNeighborZ_" + StringUtil::toString<int>(level);
+        WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec, nodesVec);
+    }
+}
 
+//////////////////////////////////////////////////////////////////////////
 
-	//////////////////////////////////////////////////////////////////////////
-	void writeInterfaceLinesDebugCFFneighbor(Parameter* para)
+void writeNeighborZLinesDebug(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    std::vector<UbTupleInt2> cellsVec;
+    int nodeNumberVec = 0;
+
+    for (int level = 0; level < para->getMaxLevel(); level++) // evtl. Maxlevel + 1
     {
-        for (int level = 0; level < para->getMaxLevel(); level++)
-        {
-            std::string filename = para->getFName() + "_" + StringUtil::toString<int>(level) + "_CFFneighbor.vtk";
-            writeGridInterfaceLinesNeighbors(para, level + 1, para->getParH(level)->intCF.ICellCFF, para->getParH(level)->K_CF, filename);
+        nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
+    }
+    nodesVec.resize(nodeNumberVec * 2);
+    int nodeCount = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->size_Mat_SP; u++) {
+            real x1  = para->getParH(level)->coordX_SP[u];
+            real x2  = para->getParH(level)->coordY_SP[u];
+            real x3  = para->getParH(level)->coordZ_SP[u];
+            real x1N = para->getParH(level)->coordX_SP[para->getParH(level)->neighborZ_SP[u]];
+            real x2N = para->getParH(level)->coordY_SP[para->getParH(level)->neighborZ_SP[u]];
+            real x3N = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborZ_SP[u]];
+
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1N), (float)(x2N), (float)(x3N)));
+
+            if (para->getParH(level)->geoSP[u] == GEO_FLUID) {
+                cellsVec.push_back(makeUbTuple(nodeCount - 2, nodeCount - 1));
+            }
         }
-	}
+        std::string filenameVec = para->getFName() + "_" + StringUtil::toString<int>(level) + "_NeighborZ_Lines.vtk";
+        WbWriterVtkXmlBinary::getInstance()->writeLines(filenameVec, nodesVec, cellsVec);
+    }
+}
 
+//////////////////////////////////////////////////////////////////////////
 
-	//////////////////////////////////////////////////////////////////////////
-	void writeInterfaceLinesDebugFCCneighbor(Parameter* para)
+void writeInterfaceCellsDebugCFC(Parameter *para)
+{
+
+    std::vector<UbTupleFloat3> nodesVec;
+    std::vector<UbTupleInt8> cellsVec;
+    int nodeNumberVec = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) // evtl. Maxlevel + 1
     {
-        for (int level = 0; level < para->getMaxLevel(); level++)
-        {
-            std::string filename = para->getFName() + "_" + StringUtil::toString<int>(level) + "_FCCneighbor.vtk";
-            writeGridInterfaceLinesNeighbors(para, level, para->getParH(level)->intFC.ICellFCC, para->getParH(level)->K_FC, filename);
+        nodeNumberVec += (int)para->getParH(level)->K_CF;
+    }
+    nodesVec.resize(nodeNumberVec * 8);
+    int nodeCount = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->K_CF; u++) {
+            int pos = para->getParH(level)->intCF.ICellCFC[u];
+
+            double x1             = para->getParH(level)->coordX_SP[pos];
+            double x2             = para->getParH(level)->coordY_SP[pos];
+            double x3             = para->getParH(level)->coordZ_SP[pos];
+            double x1P            = para->getParH(level)->coordX_SP[para->getParH(level)->neighborX_SP[pos]];
+            double x2P            = para->getParH(level)->coordY_SP[para->getParH(level)->neighborY_SP[pos]];
+            double x3P            = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborZ_SP[pos]];
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1P), (float)(x2), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1P), (float)(x2P), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2P), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3P)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1P), (float)(x2), (float)(x3P)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1P), (float)(x2P), (float)(x3P)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2P), (float)(x3P)));
+
+            cellsVec.push_back(makeUbTuple(nodeCount - 8, nodeCount - 7, nodeCount - 6, nodeCount - 5, nodeCount - 4,
+                                           nodeCount - 3, nodeCount - 2, nodeCount - 1));
         }
-	}
+        std::string filenameVec = para->getFName() + "_CellsCFC_" + StringUtil::toString<int>(level);
+        WbWriterVtkXmlBinary::getInstance()->writeOcts(filenameVec, nodesVec, cellsVec);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
 
+void writeInterfaceCellsDebugCFF(Parameter *para)
+{
 
-	//////////////////////////////////////////////////////////////////////////
-	void writeInterfaceLinesDebugFCFneighbor(Parameter* para)
+    std::vector<UbTupleFloat3> nodesVec;
+    std::vector<UbTupleInt8> cellsVec;
+    int nodeNumberVec = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) // evtl. Maxlevel + 1
     {
-        for (int level = 0; level < para->getMaxLevel(); level++)
-        {
-            std::string filename = para->getFName() + "_" + StringUtil::toString<int>(level) + "_FCFneighbor.vtk";
-            writeGridInterfaceLinesNeighbors(para, level + 1, para->getParH(level)->intFC.ICellFCF, para->getParH(level)->K_FC, filename);
+        nodeNumberVec += (int)para->getParH(level)->K_CF;
+    }
+    nodesVec.resize(nodeNumberVec * 8);
+    int nodeCount = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->K_CF; u++) {
+            int pos = para->getParH(level)->intCF.ICellCFF[u];
+
+            double x1             = para->getParH(level + 1)->coordX_SP[pos];
+            double x2             = para->getParH(level + 1)->coordY_SP[pos];
+            double x3             = para->getParH(level + 1)->coordZ_SP[pos];
+            double x1P            = para->getParH(level + 1)->coordX_SP[para->getParH(level + 1)->neighborX_SP[pos]];
+            double x2P            = para->getParH(level + 1)->coordY_SP[para->getParH(level + 1)->neighborY_SP[pos]];
+            double x3P            = para->getParH(level + 1)->coordZ_SP[para->getParH(level + 1)->neighborZ_SP[pos]];
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1P), (float)(x2), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1P), (float)(x2P), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2P), (float)(x3)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3P)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1P), (float)(x2), (float)(x3P)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1P), (float)(x2P), (float)(x3P)));
+            nodesVec[nodeCount++] = (makeUbTuple((float)(x1), (float)(x2P), (float)(x3P)));
+
+            cellsVec.push_back(makeUbTuple(nodeCount - 8, nodeCount - 7, nodeCount - 6, nodeCount - 5, nodeCount - 4,
+                                           nodeCount - 3, nodeCount - 2, nodeCount - 1));
         }
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-	void writeInterfaceLinesDebugOff(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		std::vector< UbTupleInt2 > cellsVec;
-		int nodeNumberVec = 0;
-
-		for (int level = 0; level < para->getMaxLevel(); level++) //evtl. Maxlevel + 1
-		{
-			nodeNumberVec += (int)para->getParH(level)->K_CF;
-		}
-		nodesVec.resize(nodeNumberVec*8);
-		int nodeCount = 0;
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->K_CF;u++)
-			{
-				double xoff = para->getParH(level)->offCF.xOffCF[u];
-				double yoff = para->getParH(level)->offCF.yOffCF[u];
-				double zoff = para->getParH(level)->offCF.zOffCF[u];
+        std::string filenameVec = para->getFName() + "_CellsCFF_" + StringUtil::toString<int>(level);
+        WbWriterVtkXmlBinary::getInstance()->writeOcts(filenameVec, nodesVec, cellsVec);
+    }
+}
+
 
-				int posFine = para->getParH(level)->intCF.ICellCFF[u];
-
-				double x1Fine = para->getParH(level+1)->coordX_SP[posFine];
-				double x2Fine = para->getParH(level+1)->coordY_SP[posFine];
-				double x3Fine = para->getParH(level+1)->coordZ_SP[posFine];
-
-				double x1 = x1Fine + xoff;
-				double x2 = x2Fine + yoff;
-				double x3 = x3Fine + zoff;
-
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1Fine),(float)(x2Fine),(float)(x3Fine) ) );
-
-				cellsVec.push_back( makeUbTuple(nodeCount-2,nodeCount-1) );
-
-			}
-			std::string filenameVec = para->getFName()+"_"+StringUtil::toString<int>(level)+"_OffDebugCF_Offs.vtk";
-			WbWriterVtkXmlBinary::getInstance()->writeLines(filenameVec,nodesVec,cellsVec);
-            cellsVec.clear();
-            nodesVec.clear();
-		}
-	}
 
 
-	//////////////////////////////////////////////////////////////////////////
 
 
-	void writeInterfacePointsDebugCFC(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec2;
-		int nodeNumberVec = 0;
 
-		for (int level = 0; level < para->getMaxLevel(); level++) //evtl. Maxlevel + 1
-		{
-			nodeNumberVec += (int)para->getParH(level)->K_CF;
-		}
-		nodesVec2.resize(nodeNumberVec*8); 
-		int nodeCount2 = 0; 
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->K_CF;u++)
-			{
-				int pos = para->getParH(level)->intCF.ICellCFC[u];
-
-				double x1 = para->getParH(level)->coordX_SP[pos];
-				double x2 = para->getParH(level)->coordY_SP[pos];
-				double x3 = para->getParH(level)->coordZ_SP[pos];
-
-				nodesVec2[nodeCount2++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-
-			}
-			std::string filenameVec2 = para->getFName()+"_"+StringUtil::toString<int>(level)+"_OffDebugPointsCF.vtk";
-			WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec2,nodesVec2);
-		}
-	}
 
 
-	//////////////////////////////////////////////////////////////////////////
 
 
-	void writeBcPointsDebug(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec2;
-		int nodeNumberVec = 0;
-
-		for (int level = 0; level <= para->getMaxLevel(); level++) //evtl. Maxlevel + 1
-		{
-			nodeNumberVec += (int)para->getParH(level)->QWall.kQ;
-		}
-		nodesVec2.resize(nodeNumberVec*8); 
-		int nodeCount2 = 0; 
-		for (int level = 0; level <= para->getMaxLevel(); level++)
-		{
-			for(int u=0;u<para->getParH(level)->QWall.kQ;u++)
-			{
-				int pos = para->getParH(level)->QWall.k[u];
-
-				double x1 = para->getParH(level)->coordX_SP[pos];
-				double x2 = para->getParH(level)->coordY_SP[pos];
-				double x3 = para->getParH(level)->coordZ_SP[pos];
-
-				nodesVec2[nodeCount2++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-
-			}
-			std::string filenameVec2 = para->getFName()+"_PointsBc_"+StringUtil::toString<int>(level);
-			WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec2,nodesVec2);
-		}
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-
-
-	void writePressPointsDebug(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		int nodeNumberVec = 0;
-
-		for (int level = 0; level <= para->getMaxLevel(); level++) //evtl. Maxlevel + 1
-		{
-			nodeNumberVec += (int)para->getParH(level)->QPress.kQ;
-		}
-		nodesVec.resize(nodeNumberVec); 
-		int nodeCount2 = 0; 
-		for (int level = 0; level <= para->getMaxLevel(); level++)
-		{
-			for(int u=0;u<para->getParH(level)->QPress.kQ;u++)
-			{
-				int pos = para->getParH(level)->QPress.k[u];
-
-				double x1 = para->getParH(level)->coordX_SP[pos];
-				double x2 = para->getParH(level)->coordY_SP[pos];
-				double x3 = para->getParH(level)->coordZ_SP[pos];
-
-				nodesVec[nodeCount2++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-
-			}
-			std::string filenameVec = para->getFName()+"_PointsPress_"+StringUtil::toString<int>(level);
-			WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec,nodesVec);
-		}
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-
-
-	void writePressNeighborPointsDebug(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		int nodeNumberVec = 0;
-
-		for (int level = 0; level <= para->getMaxLevel(); level++)
-		{
-			nodeNumberVec += (int)para->getParH(level)->QPress.kQ;
-		}
-		nodesVec.resize(nodeNumberVec); 
-		int nodeCount2 = 0; 
-		for (int level = 0; level <= para->getMaxLevel(); level++)
-		{
-			for(int u=0;u<para->getParH(level)->QPress.kQ;u++)
-			{
-				int pos = para->getParH(level)->QPress.kN[u];
-
-				real x1 = para->getParH(level)->coordX_SP[pos];
-				real x2 = para->getParH(level)->coordY_SP[pos];
-				real x3 = para->getParH(level)->coordZ_SP[pos];
-
-				nodesVec[nodeCount2++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-			}
-			std::string filenameVec = para->getFName()+"_PointsPressNeighbor_"+StringUtil::toString<int>(level);
-			WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec,nodesVec);
-		}
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-
-
-	void writeNeighborXPointsDebug(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		int nodeNumberVec = 0;
-
-		for (int level = 0; level <= para->getMaxLevel(); level++)
-		{
-			nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
-		}
-		nodesVec.resize(nodeNumberVec); 
-		int nodeCount2 = 0;
-		for (int level = 0; level <= para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->size_Mat_SP;u++)
-			{
-				real x1 = para->getParH(level)->coordX_SP[para->getParH(level)->neighborX_SP[u]];
-				real x2 = para->getParH(level)->coordY_SP[para->getParH(level)->neighborX_SP[u]];
-				real x3 = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborX_SP[u]];
-
-				nodesVec[nodeCount2++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-			}
-			std::string filenameVec = para->getFName()+"_PointsNeighborX_"+StringUtil::toString<int>(level);
-			WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec,nodesVec);
-		}
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-
-
-	void writeNeighborXLinesDebug(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		std::vector< UbTupleInt2 > cellsVec;
-		int nodeNumberVec = 0;
-
-		for (int level = 0; level < para->getMaxLevel(); level++) //evtl. Maxlevel + 1
-		{
-			nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
-		}
-		nodesVec.resize(nodeNumberVec*2);
-		int nodeCount = 0;
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->size_Mat_SP;u++)
-			{
-				real x1 = para->getParH(level)->coordX_SP[u];
-				real x2 = para->getParH(level)->coordY_SP[u];
-				real x3 = para->getParH(level)->coordZ_SP[u];
-				real x1N = para->getParH(level)->coordX_SP[para->getParH(level)->neighborX_SP[u]];
-				real x2N = para->getParH(level)->coordY_SP[para->getParH(level)->neighborX_SP[u]];
-				real x3N = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborX_SP[u]];
-
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1N),(float)(x2N),(float)(x3N) ) );
-
-				if (para->getParH(level)->geoSP[u]==GEO_FLUID)
-				{
-					cellsVec.push_back( makeUbTuple(nodeCount-2,nodeCount-1) );
-				}
-
-			}
-			std::string filenameVec = para->getFName()+"_"+StringUtil::toString<int>(level)+"_NeighborX_Lines.vtk";
-			WbWriterVtkXmlBinary::getInstance()->writeLines(filenameVec,nodesVec,cellsVec);
-		}
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-
-
-	void writeNeighborYPointsDebug(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		int nodeNumberVec = 0;
-
-		for (int level = 0; level <= para->getMaxLevel(); level++)
-		{
-			nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
-		}
-		nodesVec.resize(nodeNumberVec); 
-		int nodeCount2 = 0;
-		for (int level = 0; level <= para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->size_Mat_SP;u++)
-			{
-				real x1 = para->getParH(level)->coordX_SP[para->getParH(level)->neighborY_SP[u]];
-				real x2 = para->getParH(level)->coordY_SP[para->getParH(level)->neighborY_SP[u]];
-				real x3 = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborY_SP[u]];
-
-				nodesVec[nodeCount2++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-			}
-			std::string filenameVec = para->getFName()+"_PointsNeighborY_"+StringUtil::toString<int>(level);
-			WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec,nodesVec);
-		}
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-
-
-	void writeNeighborYLinesDebug(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		std::vector< UbTupleInt2 > cellsVec;
-		int nodeNumberVec = 0;
-
-		for (int level = 0; level < para->getMaxLevel(); level++) //evtl. Maxlevel + 1
-		{
-			nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
-		}
-		nodesVec.resize(nodeNumberVec*2);
-		int nodeCount = 0;
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->size_Mat_SP;u++)
-			{
-				real x1 = para->getParH(level)->coordX_SP[u];
-				real x2 = para->getParH(level)->coordY_SP[u];
-				real x3 = para->getParH(level)->coordZ_SP[u];
-				real x1N = para->getParH(level)->coordX_SP[para->getParH(level)->neighborY_SP[u]];
-				real x2N = para->getParH(level)->coordY_SP[para->getParH(level)->neighborY_SP[u]];
-				real x3N = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborY_SP[u]];
-
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1N),(float)(x2N),(float)(x3N) ) );
-
-				if (para->getParH(level)->geoSP[u]==GEO_FLUID)
-				{
-					cellsVec.push_back( makeUbTuple(nodeCount-2,nodeCount-1) );
-				}
-
-			}
-			std::string filenameVec = para->getFName()+"_"+StringUtil::toString<int>(level)+"_NeighborY_Lines.vtk";
-			WbWriterVtkXmlBinary::getInstance()->writeLines(filenameVec,nodesVec,cellsVec);
-		}
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-
-
-	void writeNeighborZPointsDebug(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		int nodeNumberVec = 0;
-
-		for (int level = 0; level <= para->getMaxLevel(); level++)
-		{
-			nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
-		}
-		nodesVec.resize(nodeNumberVec); 
-		int nodeCount2 = 0;
-		for (int level = 0; level <= para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->size_Mat_SP;u++)
-			{
-				real x1 = para->getParH(level)->coordX_SP[para->getParH(level)->neighborZ_SP[u]];
-				real x2 = para->getParH(level)->coordY_SP[para->getParH(level)->neighborZ_SP[u]];
-				real x3 = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborZ_SP[u]];
-
-				nodesVec[nodeCount2++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-			}
-			std::string filenameVec = para->getFName()+"_PointsNeighborZ_"+StringUtil::toString<int>(level);
-			WbWriterVtkXmlBinary::getInstance()->writeNodes(filenameVec,nodesVec);
-		}
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-
-
-	void writeNeighborZLinesDebug(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		std::vector< UbTupleInt2 > cellsVec;
-		int nodeNumberVec = 0;
-
-		for (int level = 0; level < para->getMaxLevel(); level++) //evtl. Maxlevel + 1
-		{
-			nodeNumberVec += (int)para->getParH(level)->size_Mat_SP;
-		}
-		nodesVec.resize(nodeNumberVec*2);
-		int nodeCount = 0;
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->size_Mat_SP;u++)
-			{
-				real x1 = para->getParH(level)->coordX_SP[u];
-				real x2 = para->getParH(level)->coordY_SP[u];
-				real x3 = para->getParH(level)->coordZ_SP[u];
-				real x1N = para->getParH(level)->coordX_SP[para->getParH(level)->neighborZ_SP[u]];
-				real x2N = para->getParH(level)->coordY_SP[para->getParH(level)->neighborZ_SP[u]];
-				real x3N = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborZ_SP[u]];
-
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1N),(float)(x2N),(float)(x3N) ) );
-
-				if (para->getParH(level)->geoSP[u]==GEO_FLUID)
-				{
-					cellsVec.push_back( makeUbTuple(nodeCount-2,nodeCount-1) );
-				}
-
-			}
-			std::string filenameVec = para->getFName()+"_"+StringUtil::toString<int>(level)+"_NeighborZ_Lines.vtk";
-			WbWriterVtkXmlBinary::getInstance()->writeLines(filenameVec,nodesVec,cellsVec);
-		}
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-
-
-	void writeInterfaceCellsDebugCFC(Parameter* para){
-
-		std::vector< UbTupleFloat3 > nodesVec;
-		std::vector< UbTupleInt8 > cellsVec;
-		int nodeNumberVec = 0;
-		for (int level = 0; level < para->getMaxLevel(); level++) //evtl. Maxlevel + 1
-		{
-			nodeNumberVec += (int)para->getParH(level)->K_CF;
-		}
-		nodesVec.resize(nodeNumberVec*8);
-		int nodeCount = 0;
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->K_CF;u++)
-			{
-				int pos  = para->getParH(level)->intCF.ICellCFC[u];
-
-				double x1  = para->getParH(level)->coordX_SP[pos];
-				double x2  = para->getParH(level)->coordY_SP[pos];
-				double x3  = para->getParH(level)->coordZ_SP[pos];
-				double x1P = para->getParH(level)->coordX_SP[para->getParH(level)->neighborX_SP[pos]];
-				double x2P = para->getParH(level)->coordY_SP[para->getParH(level)->neighborY_SP[pos]];
-				double x3P = para->getParH(level)->coordZ_SP[para->getParH(level)->neighborZ_SP[pos]];
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1 ),(float)(x2 ),(float)(x3 ) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1P),(float)(x2 ),(float)(x3 ) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1P),(float)(x2P),(float)(x3 ) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1 ),(float)(x2P),(float)(x3 ) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1 ),(float)(x2 ),(float)(x3P) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1P),(float)(x2 ),(float)(x3P) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1P),(float)(x2P),(float)(x3P) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1 ),(float)(x2P),(float)(x3P) ) );
-
-				cellsVec.push_back( makeUbTuple(nodeCount-8,nodeCount-7,nodeCount-6,nodeCount-5,nodeCount-4,nodeCount-3,nodeCount-2,nodeCount-1) );
-
-			}
-			std::string filenameVec = para->getFName()+"_CellsCFC_"+StringUtil::toString<int>(level);
-			WbWriterVtkXmlBinary::getInstance()->writeOcts(filenameVec,nodesVec,cellsVec);
-		}
-	}
-
-
-	//////////////////////////////////////////////////////////////////////////
-
-
-	void writeInterfaceCellsDebugCFF(Parameter* para){
-
-		std::vector< UbTupleFloat3 > nodesVec;
-		std::vector< UbTupleInt8 > cellsVec;
-		int nodeNumberVec = 0;
-		for (int level = 0; level < para->getMaxLevel(); level++) //evtl. Maxlevel + 1
-		{
-			nodeNumberVec += (int)para->getParH(level)->K_CF;
-		}
-		nodesVec.resize(nodeNumberVec*8);
-		int nodeCount = 0;
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->K_CF;u++)
-			{
-				int pos  = para->getParH(level  )->intCF.ICellCFF[u];
-
-				double x1  = para->getParH(level+1)->coordX_SP[pos];
-				double x2  = para->getParH(level+1)->coordY_SP[pos];
-				double x3  = para->getParH(level+1)->coordZ_SP[pos];
-				double x1P = para->getParH(level+1)->coordX_SP[para->getParH(level+1)->neighborX_SP[pos]];
-				double x2P = para->getParH(level+1)->coordY_SP[para->getParH(level+1)->neighborY_SP[pos]];
-				double x3P = para->getParH(level+1)->coordZ_SP[para->getParH(level+1)->neighborZ_SP[pos]];
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1 ),(float)(x2 ),(float)(x3 ) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1P),(float)(x2 ),(float)(x3 ) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1P),(float)(x2P),(float)(x3 ) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1 ),(float)(x2P),(float)(x3 ) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1 ),(float)(x2 ),(float)(x3P) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1P),(float)(x2 ),(float)(x3P) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1P),(float)(x2P),(float)(x3P) ) );
-				nodesVec[nodeCount++]=( makeUbTuple( (float)(x1 ),(float)(x2P),(float)(x3P) ) );
-
-				cellsVec.push_back( makeUbTuple(nodeCount-8,nodeCount-7,nodeCount-6,nodeCount-5,nodeCount-4,nodeCount-3,nodeCount-2,nodeCount-1) );
-
-			}
-			std::string filenameVec = para->getFName()+"_CellsCFF_"+StringUtil::toString<int>(level);
-			WbWriterVtkXmlBinary::getInstance()->writeOcts(filenameVec,nodesVec,cellsVec);
-		}
-	}
-
-
-
-
-
-
-
-
-
-
-
-
-	//////////////////////////////////////////////////////////////////////////
-	// Functions for version with streams
-	//////////////////////////////////////////////////////////////////////////
-	void checkForSendOrRecvNode(int pos, int& commDir, int& commDirectionInCommAfterFtoC, std::vector<ProcessNeighbor27>& sendRecvProcessNeighbor, 
-								 std::vector<ProcessNeighbor27>& sendRecvProcessNeighborsAfterFtoC, double indicator ){
-		for(uint pn=0; pn<(uint)sendRecvProcessNeighbor.size(); pn++)
-		{
-            for(int j=0; j<sendRecvProcessNeighbor[pn].numberOfNodes; j++)
-			{
-				if (pos == sendRecvProcessNeighbor[pn].index[j]) {
-					commDir=indicator;
-                    if(j < sendRecvProcessNeighborsAfterFtoC[pn].numberOfNodes)
-                    {
-                        commDirectionInCommAfterFtoC=indicator;
-                    }
-                    return;
-				}
-			}
-		}
-	}
-
-	void checkForRecvNodeX(int pos, int& recvDir, int& recvDirectionInCommAfterFtoC, Parameter* para, int level)
-	{
-		checkForSendOrRecvNode(pos, recvDir, recvDirectionInCommAfterFtoC, 
-							   para->getParH(level)->recvProcessNeighborX, 
-							   para->getParH(level)->recvProcessNeighborsAfterFtoCX, 
-							   2.0);
-	}
-
-	void checkForRecvNodeY(int pos, int& recvDir, int& recvDirectionInCommAfterFtoC, Parameter* para, int level)
-	{
-		checkForSendOrRecvNode(pos, recvDir, recvDirectionInCommAfterFtoC, 
-							   para->getParH(level)->recvProcessNeighborY, 
-							   para->getParH(level)->recvProcessNeighborsAfterFtoCY, 
-							   4.0);
-	}
-
-	void checkForRecvNodeZ(int pos, int& recvDir, int& recvDirectionInCommAfterFtoC, Parameter* para, int level)
-	{
-		checkForSendOrRecvNode(pos, recvDir, recvDirectionInCommAfterFtoC, 
-							   para->getParH(level)->recvProcessNeighborZ, 
-							   para->getParH(level)->recvProcessNeighborsAfterFtoCZ, 
-							   8.0);
-	}
-
-	void checkForSendNodeX(int pos, int& sendDir, int& sendDirectionInCommAfterFtoC, Parameter* para, int level)
-	{
-		checkForSendOrRecvNode(pos, sendDir, sendDirectionInCommAfterFtoC, 
-							   para->getParH(level)->sendProcessNeighborX, 
-							   para->getParH(level)->sendProcessNeighborsAfterFtoCX, 
-							   2.0);
-	}
-
-	void checkForSendNodeY(int pos, int& sendDir, int& sendDirectionInCommAfterFtoC, Parameter* para, int level)
-	{
-		checkForSendOrRecvNode(pos, sendDir, sendDirectionInCommAfterFtoC, 
-							   para->getParH(level)->sendProcessNeighborY, 
-							   para->getParH(level)->sendProcessNeighborsAfterFtoCY, 
-							   4.0);
-	}
-
-	void checkForSendNodeZ(int pos, int& sendDir, int& sendDirectionInCommAfterFtoC, Parameter* para, int level)
-	{
-		checkForSendOrRecvNode(pos, sendDir, sendDirectionInCommAfterFtoC, 
-							   para->getParH(level)->sendProcessNeighborZ, 
-							   para->getParH(level)->sendProcessNeighborsAfterFtoCZ, 
-							   8.0);
-	}
-
-	void writeInterfaceFCC_Send(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		int nodeNumberVec = 0;
-
-		// nodedata
-		std::vector< std::string > datanames = {"sparse index", "borderBulk", "sendDirection", "sendDirectionInCommAfterFtoC"};
-		// sendDirection: x = 2, y = 4, z = 8
-		// borderBulk: border = 1, bulk = 0
-		std::vector< std::vector<double>> nodedata;
-
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			nodeNumberVec += (int) para->getParH(level)->intFC.kFC;
-		}
-
-		nodesVec.resize(nodeNumberVec);
-		nodedata.resize(datanames.size(), std::vector<double>(nodeNumberVec));
-
-		int nodeCount = 0;
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->intFC.kFC;u++)
-			{
-				int pos  = para->getParH(level)->intFC.ICellFCC[u];
-				nodedata[0][nodeCount]=pos;
-
-				// coordinate section
-				double x1 = para->getParH(level)->coordX_SP[pos];
-				double x2 = para->getParH(level)->coordY_SP[pos];
-				double x3 = para->getParH(level)->coordZ_SP[pos];
-				nodesVec[nodeCount]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-
-				// nodedata section
-				nodedata[1][nodeCount]= u < para->getParH(level)->intFCBorder.kFC;
-				int sendDir = 0.0;
-				int sendDirectionInCommAfterFtoC = 0.0;
-
-				checkForSendNodeX(pos, sendDir, sendDirectionInCommAfterFtoC, para, level);
-				checkForSendNodeY(pos, sendDir, sendDirectionInCommAfterFtoC, para, level);
-				checkForSendNodeZ(pos, sendDir, sendDirectionInCommAfterFtoC, para, level);
-				nodedata[2][nodeCount]=sendDir;
-                nodedata[3][nodeCount]=sendDirectionInCommAfterFtoC;
-
-				nodeCount++;
-			}
-			std::string filenameVec = para->getFName()+"_writeInterfaceFCC_Send_PID_" + std::to_string(vf::gpu::Communicator::getInstanz()->getPID()) + "_" + StringUtil::toString<int>(level);
-			
-			WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec,nodesVec, datanames, nodedata);
-		}
-	}
-
-	void writeInterfaceCFC_Recv(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-		int nodeNumberVec = 0;
-
-		// nodedata
-		std::vector< std::string > datanames = {"sparse index", "borderBulk", "recvDirection", "recvDirectionInCommAfterFtoC"};
-		// sendDirection: x = 2, y = 4, z = 8
-		// borderBulk: border = 1, bulk = 0
-		std::vector< std::vector<double>> nodedata;
-
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			nodeNumberVec += (int) para->getParH(level)->intCF.kCF;
-		}
-
-		nodesVec.resize(nodeNumberVec);
-		nodedata.resize(datanames.size(), std::vector<double>(nodeNumberVec));
-
-		int nodeCount = 0;
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-			for(unsigned int u=0;u<para->getParH(level)->intCF.kCF;u++)
-			{
-				int pos  = para->getParH(level)->intCF.ICellCFC[u];
-				nodedata[0][nodeCount]=pos;
-
-				// coordinate section
-				double x1 = para->getParH(level)->coordX_SP[pos];
-				double x2 = para->getParH(level)->coordY_SP[pos];
-				double x3 = para->getParH(level)->coordZ_SP[pos];
-				nodesVec[nodeCount]=( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-
-				// nodedata section
-				nodedata[1][nodeCount]= u < para->getParH(level)->intCFBorder.kCF;
-				int recvDir = 0.0;
-				int recvDirectionInCommAfterFtoC = 0.0;
-
-				checkForRecvNodeX(pos, recvDir, recvDirectionInCommAfterFtoC, para, level);
-				checkForRecvNodeY(pos, recvDir, recvDirectionInCommAfterFtoC, para, level);
-				checkForRecvNodeZ(pos, recvDir, recvDirectionInCommAfterFtoC, para, level);
-				nodedata[2][nodeCount]= recvDir;
-                nodedata[3][nodeCount]= recvDirectionInCommAfterFtoC;
-
-				nodeCount++;
-			}
-			std::string filenameVec = para->getFName()+"_writeInterfaceCFC_Recv_PID_" + std::to_string(vf::gpu::Communicator::getInstanz()->getPID()) + "_" + StringUtil::toString<int>(level);
-			
-			WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec,nodesVec, datanames, nodedata);
-		}
-	}
-
-    void addToNodesVector(const int level, const int pos, std::vector< UbTupleFloat3 >& nodesVec, Parameter* para){
-        double x1 = para->getParH(level)->coordX_SP[pos];
-		double x2 = para->getParH(level)->coordY_SP[pos];
-		double x3 = para->getParH(level)->coordZ_SP[pos];
-		nodesVec.push_back( makeUbTuple( (float)(x1),(float)(x2),(float)(x3) ) );
-    }
-
-    void writeSendNodesStream(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-
-		// nodedata
-		std::vector< std::string > datanames = {"sparse index", "sendDirection", "sendDirectionInCommAfterFtoC", "inICcellFCC"};
-		// sendDirection: x = 2, y = 4, z = 8
-		std::vector< std::vector<double>> nodedata;
-        nodedata.resize(datanames.size());
-
-        int pos;
-        int sendDirectionInCommAfterFtoC;
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-            // X
-            for (int pn = 0; pn <(int)para->getParH(level)->sendProcessNeighborX.size(); pn++){
-                for (int i = 0; i < para->getParH(level)->sendProcessNeighborX[pn].numberOfNodes; i++){                    
-                    pos = para->getParH(level)->sendProcessNeighborX[pn].index[i];    
-                    nodedata[0].push_back(pos);
-                    addToNodesVector(level, pos, nodesVec, para);
 
-                    nodedata[1].push_back(2.0);
-					sendDirectionInCommAfterFtoC = (i < para->getParH(level)->sendProcessNeighborsAfterFtoCX[pn].numberOfNodes) ? 2.0: 0.0;
-                    nodedata[2].push_back(sendDirectionInCommAfterFtoC);                
+//////////////////////////////////////////////////////////////////////////
+// Functions for version with streams
+//////////////////////////////////////////////////////////////////////////
+void checkForSendOrRecvNode(int pos, int &commDir, int &commDirectionInCommAfterFtoC,
+                            std::vector<ProcessNeighbor27> &sendRecvProcessNeighbor,
+                            std::vector<ProcessNeighbor27> &sendRecvProcessNeighborsAfterFtoC, double indicator)
+{
+    for (uint pn = 0; pn < (uint)sendRecvProcessNeighbor.size(); pn++) {
+        for (int j = 0; j < sendRecvProcessNeighbor[pn].numberOfNodes; j++) {
+            if (pos == sendRecvProcessNeighbor[pn].index[j]) {
+                commDir = indicator;
+                if (j < sendRecvProcessNeighborsAfterFtoC[pn].numberOfNodes) {
+                    commDirectionInCommAfterFtoC = indicator;
                 }
+                return;
             }
+        }
+    }
+}
 
-            // Y 
-            for (int pn = 0; pn <(int)para->getParH(level)->sendProcessNeighborY.size(); pn++){              
-                for (int i = 0; i < para->getParH(level)->sendProcessNeighborY[pn].numberOfNodes; i++){
-                    pos = para->getParH(level)->sendProcessNeighborY[pn].index[i];
-                    
-					sendDirectionInCommAfterFtoC=(i < para->getParH(level)->sendProcessNeighborsAfterFtoCY[pn].numberOfNodes) ? 4.0 : 0.0;
-
-                    auto it = std::find(nodedata[0].begin(), nodedata[0].end(), pos);
-                    if(it == nodedata[0].end()){
-                        nodedata[0].push_back(pos);                        
-                        addToNodesVector(level, pos, nodesVec, para);
-                        nodedata[1].push_back(4.0);
-                        nodedata[2].push_back(sendDirectionInCommAfterFtoC);    
-                    }else{
-                        int posInVectors = it - nodedata[0].begin();
-                        nodedata[1][posInVectors] += 4.0;
-                        nodedata[2][posInVectors] += sendDirectionInCommAfterFtoC;
-                    }
-                }
+void checkForRecvNodeX(int pos, int &recvDir, int &recvDirectionInCommAfterFtoC, Parameter *para, int level)
+{
+    checkForSendOrRecvNode(pos, recvDir, recvDirectionInCommAfterFtoC, para->getParH(level)->recvProcessNeighborX,
+                           para->getParH(level)->recvProcessNeighborsAfterFtoCX, 2.0);
+}
+
+void checkForRecvNodeY(int pos, int &recvDir, int &recvDirectionInCommAfterFtoC, Parameter *para, int level)
+{
+    checkForSendOrRecvNode(pos, recvDir, recvDirectionInCommAfterFtoC, para->getParH(level)->recvProcessNeighborY,
+                           para->getParH(level)->recvProcessNeighborsAfterFtoCY, 4.0);
+}
+
+void checkForRecvNodeZ(int pos, int &recvDir, int &recvDirectionInCommAfterFtoC, Parameter *para, int level)
+{
+    checkForSendOrRecvNode(pos, recvDir, recvDirectionInCommAfterFtoC, para->getParH(level)->recvProcessNeighborZ,
+                           para->getParH(level)->recvProcessNeighborsAfterFtoCZ, 8.0);
+}
+
+void checkForSendNodeX(int pos, int &sendDir, int &sendDirectionInCommAfterFtoC, Parameter *para, int level)
+{
+    checkForSendOrRecvNode(pos, sendDir, sendDirectionInCommAfterFtoC, para->getParH(level)->sendProcessNeighborX,
+                           para->getParH(level)->sendProcessNeighborsAfterFtoCX, 2.0);
+}
+
+void checkForSendNodeY(int pos, int &sendDir, int &sendDirectionInCommAfterFtoC, Parameter *para, int level)
+{
+    checkForSendOrRecvNode(pos, sendDir, sendDirectionInCommAfterFtoC, para->getParH(level)->sendProcessNeighborY,
+                           para->getParH(level)->sendProcessNeighborsAfterFtoCY, 4.0);
+}
+
+void checkForSendNodeZ(int pos, int &sendDir, int &sendDirectionInCommAfterFtoC, Parameter *para, int level)
+{
+    checkForSendOrRecvNode(pos, sendDir, sendDirectionInCommAfterFtoC, para->getParH(level)->sendProcessNeighborZ,
+                           para->getParH(level)->sendProcessNeighborsAfterFtoCZ, 8.0);
+}
+
+void writeInterfaceFCC_Send(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    int nodeNumberVec = 0;
+
+    // nodedata
+    std::vector<std::string> datanames = { "sparse index", "borderBulk", "sendDirection",
+                                           "sendDirectionInCommAfterFtoC" };
+    // sendDirection: x = 2, y = 4, z = 8
+    // borderBulk: border = 1, bulk = 0
+    std::vector<std::vector<double>> nodedata;
+
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        nodeNumberVec += (int)para->getParH(level)->intFC.kFC;
+    }
+
+    nodesVec.resize(nodeNumberVec);
+    nodedata.resize(datanames.size(), std::vector<double>(nodeNumberVec));
+
+    int nodeCount = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->intFC.kFC; u++) {
+            int pos                = para->getParH(level)->intFC.ICellFCC[u];
+            nodedata[0][nodeCount] = pos;
+
+            // coordinate section
+            double x1           = para->getParH(level)->coordX_SP[pos];
+            double x2           = para->getParH(level)->coordY_SP[pos];
+            double x3           = para->getParH(level)->coordZ_SP[pos];
+            nodesVec[nodeCount] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+
+            // nodedata section
+            nodedata[1][nodeCount]           = u < para->getParH(level)->intFCBorder.kFC;
+            int sendDir                      = 0.0;
+            int sendDirectionInCommAfterFtoC = 0.0;
+
+            checkForSendNodeX(pos, sendDir, sendDirectionInCommAfterFtoC, para, level);
+            checkForSendNodeY(pos, sendDir, sendDirectionInCommAfterFtoC, para, level);
+            checkForSendNodeZ(pos, sendDir, sendDirectionInCommAfterFtoC, para, level);
+            nodedata[2][nodeCount] = sendDir;
+            nodedata[3][nodeCount] = sendDirectionInCommAfterFtoC;
+
+            nodeCount++;
+        }
+        std::string filenameVec = para->getFName() + "_writeInterfaceFCC_Send_PID_" +
+                                  std::to_string(vf::gpu::Communicator::getInstanz()->getPID()) + "_" +
+                                  StringUtil::toString<int>(level);
+
+        WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec, nodesVec, datanames, nodedata);
+    }
+}
+
+void writeInterfaceCFC_Recv(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+    int nodeNumberVec = 0;
+
+    // nodedata
+    std::vector<std::string> datanames = { "sparse index", "borderBulk", "recvDirection",
+                                           "recvDirectionInCommAfterFtoC" };
+    // sendDirection: x = 2, y = 4, z = 8
+    // borderBulk: border = 1, bulk = 0
+    std::vector<std::vector<double>> nodedata;
+
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        nodeNumberVec += (int)para->getParH(level)->intCF.kCF;
+    }
+
+    nodesVec.resize(nodeNumberVec);
+    nodedata.resize(datanames.size(), std::vector<double>(nodeNumberVec));
+
+    int nodeCount = 0;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        for (unsigned int u = 0; u < para->getParH(level)->intCF.kCF; u++) {
+            int pos                = para->getParH(level)->intCF.ICellCFC[u];
+            nodedata[0][nodeCount] = pos;
+
+            // coordinate section
+            double x1           = para->getParH(level)->coordX_SP[pos];
+            double x2           = para->getParH(level)->coordY_SP[pos];
+            double x3           = para->getParH(level)->coordZ_SP[pos];
+            nodesVec[nodeCount] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+
+            // nodedata section
+            nodedata[1][nodeCount]           = u < para->getParH(level)->intCFBorder.kCF;
+            int recvDir                      = 0.0;
+            int recvDirectionInCommAfterFtoC = 0.0;
+
+            checkForRecvNodeX(pos, recvDir, recvDirectionInCommAfterFtoC, para, level);
+            checkForRecvNodeY(pos, recvDir, recvDirectionInCommAfterFtoC, para, level);
+            checkForRecvNodeZ(pos, recvDir, recvDirectionInCommAfterFtoC, para, level);
+            nodedata[2][nodeCount] = recvDir;
+            nodedata[3][nodeCount] = recvDirectionInCommAfterFtoC;
+
+            nodeCount++;
+        }
+        std::string filenameVec = para->getFName() + "_writeInterfaceCFC_Recv_PID_" +
+                                  std::to_string(vf::gpu::Communicator::getInstanz()->getPID()) + "_" +
+                                  StringUtil::toString<int>(level);
+
+        WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec, nodesVec, datanames, nodedata);
+    }
+}
+
+void addToNodesVector(const int level, const int pos, std::vector<UbTupleFloat3> &nodesVec, Parameter *para)
+{
+    double x1 = para->getParH(level)->coordX_SP[pos];
+    double x2 = para->getParH(level)->coordY_SP[pos];
+    double x3 = para->getParH(level)->coordZ_SP[pos];
+    nodesVec.push_back(makeUbTuple((float)(x1), (float)(x2), (float)(x3)));
+}
+
+void writeSendNodesStream(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+
+    // nodedata
+    std::vector<std::string> datanames = { "sparse index", "sendDirection", "sendDirectionInCommAfterFtoC",
+                                           "inICcellFCC" };
+    // sendDirection: x = 2, y = 4, z = 8
+    std::vector<std::vector<double>> nodedata;
+    nodedata.resize(datanames.size());
+
+    int pos;
+    int sendDirectionInCommAfterFtoC;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        // X
+        for (int pn = 0; pn < (int)para->getParH(level)->sendProcessNeighborX.size(); pn++) {
+            for (int i = 0; i < para->getParH(level)->sendProcessNeighborX[pn].numberOfNodes; i++) {
+                pos = para->getParH(level)->sendProcessNeighborX[pn].index[i];
+                nodedata[0].push_back(pos);
+                addToNodesVector(level, pos, nodesVec, para);
+
+                nodedata[1].push_back(2.0);
+                sendDirectionInCommAfterFtoC =
+                    (i < para->getParH(level)->sendProcessNeighborsAfterFtoCX[pn].numberOfNodes) ? 2.0 : 0.0;
+                nodedata[2].push_back(sendDirectionInCommAfterFtoC);
             }
+        }
 
-            // Z 
-            for (int pn = 0; pn <(int)para->getParH(level)->sendProcessNeighborZ.size(); pn++){ 
-                for (int i = 0; i < para->getParH(level)->sendProcessNeighborZ[pn].numberOfNodes; i++){
-                    pos = para->getParH(level)->sendProcessNeighborZ[pn].index[i];
-
-					sendDirectionInCommAfterFtoC=(i < para->getParH(level)->sendProcessNeighborsAfterFtoCZ[pn].numberOfNodes) ? 8.0 : 0.0;
-
-                    auto it = std::find(nodedata[0].begin(), nodedata[0].end(), pos);
-                    if(it == nodedata[0].end()){
-                        nodedata[0].push_back(pos);
-                        addToNodesVector(level, pos, nodesVec, para);                        
-                        nodedata[1].push_back(8.0);
-                        nodedata[2].push_back(sendDirectionInCommAfterFtoC);    
-                    }else{
-                        int posInVectors = it - nodedata[0].begin();
-                        nodedata[1][posInVectors] += 8.0;
-                        nodedata[2][posInVectors] += sendDirectionInCommAfterFtoC;
-                    }
-                }
-			}
-
-            // check if node is in iCellFCC
-            nodedata[3].resize(nodedata[0].size());
-            for(int i = 0; i < (int)nodedata[0].size(); i++){
-                pos = nodedata[0][i];
-                for(unsigned int u=0;u<para->getParH(level)->intFC.kFC;u++)
-			    {
-				    if(para->getParH(level)->intFC.ICellFCC[u]==(uint)pos)
-                    {
-                        nodedata[3][i] = 1.0;
-                        break;
-                    }
-                    nodedata[3][i] = 0.0;
+        // Y
+        for (int pn = 0; pn < (int)para->getParH(level)->sendProcessNeighborY.size(); pn++) {
+            for (int i = 0; i < para->getParH(level)->sendProcessNeighborY[pn].numberOfNodes; i++) {
+                pos = para->getParH(level)->sendProcessNeighborY[pn].index[i];
+
+                sendDirectionInCommAfterFtoC =
+                    (i < para->getParH(level)->sendProcessNeighborsAfterFtoCY[pn].numberOfNodes) ? 4.0 : 0.0;
+
+                auto it = std::find(nodedata[0].begin(), nodedata[0].end(), pos);
+                if (it == nodedata[0].end()) {
+                    nodedata[0].push_back(pos);
+                    addToNodesVector(level, pos, nodesVec, para);
+                    nodedata[1].push_back(4.0);
+                    nodedata[2].push_back(sendDirectionInCommAfterFtoC);
+                } else {
+                    int posInVectors = it - nodedata[0].begin();
+                    nodedata[1][posInVectors] += 4.0;
+                    nodedata[2][posInVectors] += sendDirectionInCommAfterFtoC;
                 }
             }
-	        std::string filenameVec = para->getFName()+"_writeSendNodesStreams_PID_" + std::to_string(vf::gpu::Communicator::getInstanz()->getPID()) + "_" +StringUtil::toString<int>(level);
-			
-		    WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec, nodesVec, datanames, nodedata);
         }
-	}
-
-    void writeRecvNodesStream(Parameter* para){
-		std::vector< UbTupleFloat3 > nodesVec;
-
-		// nodedata
-		std::vector< std::string > datanames = {"sparse index", "recvDirection", "recvDirectionInCommAfterFtoC"};
-		// sendDirection: x = 2, y = 4, z = 8
-		std::vector< std::vector<double>> nodedata;
-        nodedata.resize(datanames.size());
-
-        int pos;
-        int recvDirectionInCommAfterFtoC;
-		for (int level = 0; level < para->getMaxLevel(); level++)
-		{
-            // X
-            for (int pn = 0; pn <(int)para->getParH(level)->recvProcessNeighborX.size(); pn++){
-                for (int i = 0; i < para->getParH(level)->recvProcessNeighborX[pn].numberOfNodes; i++){                    
-                    pos = para->getParH(level)->recvProcessNeighborX[pn].index[i];    
+
+        // Z
+        for (int pn = 0; pn < (int)para->getParH(level)->sendProcessNeighborZ.size(); pn++) {
+            for (int i = 0; i < para->getParH(level)->sendProcessNeighborZ[pn].numberOfNodes; i++) {
+                pos = para->getParH(level)->sendProcessNeighborZ[pn].index[i];
+
+                sendDirectionInCommAfterFtoC =
+                    (i < para->getParH(level)->sendProcessNeighborsAfterFtoCZ[pn].numberOfNodes) ? 8.0 : 0.0;
+
+                auto it = std::find(nodedata[0].begin(), nodedata[0].end(), pos);
+                if (it == nodedata[0].end()) {
                     nodedata[0].push_back(pos);
                     addToNodesVector(level, pos, nodesVec, para);
-
-                    nodedata[1].push_back(2.0);
-					recvDirectionInCommAfterFtoC = (i < para->getParH(level)->recvProcessNeighborsAfterFtoCX[pn].numberOfNodes) ? 2.0: 0.0;
-                    nodedata[2].push_back(recvDirectionInCommAfterFtoC);                
+                    nodedata[1].push_back(8.0);
+                    nodedata[2].push_back(sendDirectionInCommAfterFtoC);
+                } else {
+                    int posInVectors = it - nodedata[0].begin();
+                    nodedata[1][posInVectors] += 8.0;
+                    nodedata[2][posInVectors] += sendDirectionInCommAfterFtoC;
                 }
             }
+        }
 
-            // Y 
-            for (int pn = 0; pn <(int)para->getParH(level)->recvProcessNeighborY.size(); pn++){              
-                for (int i = 0; i < para->getParH(level)->recvProcessNeighborY[pn].numberOfNodes; i++){
-                    pos = para->getParH(level)->recvProcessNeighborY[pn].index[i];
-                    
-					recvDirectionInCommAfterFtoC=(i < para->getParH(level)->recvProcessNeighborsAfterFtoCY[pn].numberOfNodes) ? 4.0 : 0.0;
-
-                    auto it = std::find(nodedata[0].begin(), nodedata[0].end(), pos);
-                    if(it == nodedata[0].end()){
-                        nodedata[0].push_back(pos);                        
-                        addToNodesVector(level, pos, nodesVec, para);
-                        nodedata[1].push_back(4.0);
-                        nodedata[2].push_back(recvDirectionInCommAfterFtoC);    
-                    }else{
-                        int posInVectors = it - nodedata[0].begin();
-                        nodedata[1][posInVectors] += 4.0;
-                        nodedata[2][posInVectors] += recvDirectionInCommAfterFtoC;
-                    }
+        // check if node is in iCellFCC
+        nodedata[3].resize(nodedata[0].size());
+        for (int i = 0; i < (int)nodedata[0].size(); i++) {
+            pos = nodedata[0][i];
+            for (unsigned int u = 0; u < para->getParH(level)->intFC.kFC; u++) {
+                if (para->getParH(level)->intFC.ICellFCC[u] == (uint)pos) {
+                    nodedata[3][i] = 1.0;
+                    break;
                 }
+                nodedata[3][i] = 0.0;
+            }
+        }
+        std::string filenameVec = para->getFName() + "_writeSendNodesStreams_PID_" +
+                                  std::to_string(vf::gpu::Communicator::getInstanz()->getPID()) + "_" +
+                                  StringUtil::toString<int>(level);
+
+        WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec, nodesVec, datanames, nodedata);
+    }
+}
+
+void writeRecvNodesStream(Parameter *para)
+{
+    std::vector<UbTupleFloat3> nodesVec;
+
+    // nodedata
+    std::vector<std::string> datanames = { "sparse index", "recvDirection", "recvDirectionInCommAfterFtoC" };
+    // sendDirection: x = 2, y = 4, z = 8
+    std::vector<std::vector<double>> nodedata;
+    nodedata.resize(datanames.size());
+
+    int pos;
+    int recvDirectionInCommAfterFtoC;
+    for (int level = 0; level < para->getMaxLevel(); level++) {
+        // X
+        for (int pn = 0; pn < (int)para->getParH(level)->recvProcessNeighborX.size(); pn++) {
+            for (int i = 0; i < para->getParH(level)->recvProcessNeighborX[pn].numberOfNodes; i++) {
+                pos = para->getParH(level)->recvProcessNeighborX[pn].index[i];
+                nodedata[0].push_back(pos);
+                addToNodesVector(level, pos, nodesVec, para);
+
+                nodedata[1].push_back(2.0);
+                recvDirectionInCommAfterFtoC =
+                    (i < para->getParH(level)->recvProcessNeighborsAfterFtoCX[pn].numberOfNodes) ? 2.0 : 0.0;
+                nodedata[2].push_back(recvDirectionInCommAfterFtoC);
             }
+        }
+
+        // Y
+        for (int pn = 0; pn < (int)para->getParH(level)->recvProcessNeighborY.size(); pn++) {
+            for (int i = 0; i < para->getParH(level)->recvProcessNeighborY[pn].numberOfNodes; i++) {
+                pos = para->getParH(level)->recvProcessNeighborY[pn].index[i];
 
-            // Z 
-            for (int pn = 0; pn <(int)para->getParH(level)->recvProcessNeighborZ.size(); pn++){ 
-                for (int i = 0; i < para->getParH(level)->recvProcessNeighborZ[pn].numberOfNodes; i++){
-                    pos = para->getParH(level)->recvProcessNeighborZ[pn].index[i];
-
-					recvDirectionInCommAfterFtoC=(i < para->getParH(level)->recvProcessNeighborsAfterFtoCZ[pn].numberOfNodes) ? 8.0 : 0.0;
-
-                    auto it = std::find(nodedata[0].begin(), nodedata[0].end(), pos);
-                    if(it == nodedata[0].end()){
-                        nodedata[0].push_back(pos);
-                        addToNodesVector(level, pos, nodesVec, para);                        
-                        nodedata[1].push_back(8.0);
-                        nodedata[2].push_back(recvDirectionInCommAfterFtoC);    
-                    }else{
-                        int posInVectors = it - nodedata[0].begin();
-                        nodedata[1][posInVectors] += 8.0;
-                        nodedata[2][posInVectors] += recvDirectionInCommAfterFtoC;
-                    }
+                recvDirectionInCommAfterFtoC =
+                    (i < para->getParH(level)->recvProcessNeighborsAfterFtoCY[pn].numberOfNodes) ? 4.0 : 0.0;
+
+                auto it = std::find(nodedata[0].begin(), nodedata[0].end(), pos);
+                if (it == nodedata[0].end()) {
+                    nodedata[0].push_back(pos);
+                    addToNodesVector(level, pos, nodesVec, para);
+                    nodedata[1].push_back(4.0);
+                    nodedata[2].push_back(recvDirectionInCommAfterFtoC);
+                } else {
+                    int posInVectors = it - nodedata[0].begin();
+                    nodedata[1][posInVectors] += 4.0;
+                    nodedata[2][posInVectors] += recvDirectionInCommAfterFtoC;
                 }
-			}
+            }
+        }
 
-            // Recv are nodes ghost nodes and therefore they can't be iCellCFCs
+        // Z
+        for (int pn = 0; pn < (int)para->getParH(level)->recvProcessNeighborZ.size(); pn++) {
+            for (int i = 0; i < para->getParH(level)->recvProcessNeighborZ[pn].numberOfNodes; i++) {
+                pos = para->getParH(level)->recvProcessNeighborZ[pn].index[i];
 
-	        std::string filenameVec = para->getFName()+"_writeRecvNodesStreams_PID_" + std::to_string(vf::gpu::Communicator::getInstanz()->getPID()) + "_" +StringUtil::toString<int>(level);
-			
-		    WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec, nodesVec, datanames, nodedata);
+                recvDirectionInCommAfterFtoC =
+                    (i < para->getParH(level)->recvProcessNeighborsAfterFtoCZ[pn].numberOfNodes) ? 8.0 : 0.0;
+
+                auto it = std::find(nodedata[0].begin(), nodedata[0].end(), pos);
+                if (it == nodedata[0].end()) {
+                    nodedata[0].push_back(pos);
+                    addToNodesVector(level, pos, nodesVec, para);
+                    nodedata[1].push_back(8.0);
+                    nodedata[2].push_back(recvDirectionInCommAfterFtoC);
+                } else {
+                    int posInVectors = it - nodedata[0].begin();
+                    nodedata[1][posInVectors] += 8.0;
+                    nodedata[2][posInVectors] += recvDirectionInCommAfterFtoC;
+                }
+            }
         }
-	}
 
-	
+        // Recv are nodes ghost nodes and therefore they can't be iCellCFCs
+
+        std::string filenameVec = para->getFName() + "_writeRecvNodesStreams_PID_" +
+                                  std::to_string(vf::gpu::Communicator::getInstanz()->getPID()) + "_" +
+                                  StringUtil::toString<int>(level);
 
+        WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec, nodesVec, datanames, nodedata);
+    }
 }
+} // namespace InterfaceDebugWriter
 
 #endif
-- 
GitLab