diff --git a/src/cpu/VirtualFluids.h b/src/cpu/VirtualFluids.h
index 2db82f26869de24a7145a2bb3ec6c86e9b38c058..d60189b0747541e5e02fb38752df4581ee754b33 100644
--- a/src/cpu/VirtualFluids.h
+++ b/src/cpu/VirtualFluids.h
@@ -139,16 +139,16 @@
 #include <BoundaryConditions/MultiphaseVelocityBCAlgorithm.h>
 
 #include <Connectors/Block3DConnector.h>
-#include <Connectors/Block3DConnectorFactory.h>
-#include <Connectors/CoarseToFineBlock3DConnector.h>
-#include <Connectors/CoarseToFineNodeSetBlock3DConnector.h>
-#include <Connectors/ConnectorFactory.h>
+//#include <Connectors/Block3DConnectorFactory.h>
+//#include <Connectors/CoarseToFineBlock3DConnector.h>
+//#include <Connectors/CoarseToFineNodeSetBlock3DConnector.h>
+//#include <Connectors/ConnectorFactory.h>
 #include <Connectors/D3Q27ETCFOffVectorConnector.h>
 #include <Connectors/D3Q27ETFCOffVectorConnector.h>
 #include <Connectors/D3Q27ETFullDirectConnector.h>
 #include <Connectors/D3Q27ETFullVectorConnector.h>
-#include <Connectors/FineToCoarseBlock3DConnector.h>
-#include <Connectors/FineToCoarseNodeSetBlock3DConnector.h>
+//#include <Connectors/FineToCoarseBlock3DConnector.h>
+//#include <Connectors/FineToCoarseNodeSetBlock3DConnector.h>
 #include <Connectors/LocalBlock3DConnector.h>
 #include <Connectors/RemoteBlock3DConnector.h>
 #include <Connectors/TwoDistributionsFullDirectConnector.h>
@@ -299,7 +299,7 @@
 #include <Visitors/BoundaryConditionsBlockVisitor.h>
 #include <Visitors/ChangeBoundaryDensityBlockVisitor.h>
 #include <Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.h>
-#include <Visitors/ConnectorBlockVisitor.h>
+//#include <Visitors/ConnectorBlockVisitor.h>
 #include <Visitors/CreateTransmittersHelper.h>
 #include <Visitors/GenBlocksGridVisitor.h>
 #include <Visitors/Grid3DVisitor.h>
diff --git a/src/cpu/VirtualFluidsCore/Connectors/Block3DConnectorFactory.cpp b/src/cpu/VirtualFluidsCore/Connectors/Block3DConnectorFactory.cpp
deleted file mode 100644
index e30da27cd88b759b2f0df44774c388504d303355..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/Block3DConnectorFactory.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include "Block3DConnectorFactory.h"
-#include "CoarseToFineNodeSetBlock3DConnector.h"
-#include "D3Q27ETFullDirectConnector.h"
-#include "D3Q27ETFullVectorConnector.h"
-#include "FineToCoarseNodeSetBlock3DConnector.h"
-
-Block3DConnectorFactory::Block3DConnectorFactory() = default;
-//////////////////////////////////////////////////////////////////////////
-Block3DConnectorFactory::~Block3DConnectorFactory() = default;
-//////////////////////////////////////////////////////////////////////////
-SPtr<Block3DConnector> Block3DConnectorFactory::createSameLevelDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to,
-                                                                               int sendDir)
-{
-    return SPtr<Block3DConnector>(new D3Q27ETFullDirectConnector(from, to, sendDir));
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<Block3DConnector> Block3DConnectorFactory::createSameLevelVectorConnector(SPtr<Block3D> block,
-                                                                               VectorTransmitterPtr sender,
-                                                                               VectorTransmitterPtr receiver,
-                                                                               int sendDir)
-{
-    return SPtr<Block3DConnector>(new D3Q27ETFullVectorConnector(block, sender, receiver, sendDir));
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<Block3DConnector> Block3DConnectorFactory::createCoarseToFineConnector(
-    SPtr<Block3D> block, VectorTransmitterPtr sender00, VectorTransmitterPtr receiver00, VectorTransmitterPtr sender01,
-    VectorTransmitterPtr receiver01, VectorTransmitterPtr sender10, VectorTransmitterPtr receiver10,
-    VectorTransmitterPtr sender11, VectorTransmitterPtr receiver11, int sendDir, InterpolationProcessorPtr iprocessor)
-{
-    return SPtr<Block3DConnector>(new CoarseToFineNodeSetBlock3DConnector(block, sender00, receiver00, sender01,
-                                                                          receiver01, sender10, receiver10, sender11,
-                                                                          receiver11, sendDir, iprocessor));
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<Block3DConnector> Block3DConnectorFactory::createFineToCoarseConnector(
-    SPtr<Block3D> block, VectorTransmitterPtr sender, VectorTransmitterPtr receiver, int sendDir,
-    InterpolationProcessorPtr iprocessor, FineToCoarseBlock3DConnector::CFconnectorType connType)
-{
-    return SPtr<Block3DConnector>(
-        new FineToCoarseNodeSetBlock3DConnector(block, sender, receiver, sendDir, iprocessor, connType));
-}
diff --git a/src/cpu/VirtualFluidsCore/Connectors/Block3DConnectorFactory.h b/src/cpu/VirtualFluidsCore/Connectors/Block3DConnectorFactory.h
deleted file mode 100644
index 687f787cd3efb2c7ba64bb2e722cede59ce77f48..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/Block3DConnectorFactory.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef Block3DConnectorFactory_h__
-#define Block3DConnectorFactory_h__
-
-#include "ConnectorFactory.h"
-
-#include <PointerDefinitions.h>
-
-class Block3DConnectorFactory : public ConnectorFactory
-{
-public:
-    Block3DConnectorFactory();
-    ~Block3DConnectorFactory() override;
-
-    SPtr<Block3DConnector> createSameLevelDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to, int sendDir) override;
-
-    SPtr<Block3DConnector> createSameLevelVectorConnector(SPtr<Block3D> block, VectorTransmitterPtr sender,
-                                                          VectorTransmitterPtr receiver, int sendDir) override;
-
-    SPtr<Block3DConnector> createCoarseToFineConnector(SPtr<Block3D> block, VectorTransmitterPtr sender00,
-                                                       VectorTransmitterPtr receiver00, VectorTransmitterPtr sender01,
-                                                       VectorTransmitterPtr receiver01, VectorTransmitterPtr sender10,
-                                                       VectorTransmitterPtr receiver10, VectorTransmitterPtr sender11,
-                                                       VectorTransmitterPtr receiver11, int sendDir,
-                                                       InterpolationProcessorPtr iprocessor) override;
-
-    SPtr<Block3DConnector> createFineToCoarseConnector(SPtr<Block3D> block, VectorTransmitterPtr sender,
-                                                       VectorTransmitterPtr receiver, int sendDir,
-                                                       InterpolationProcessorPtr iprocessor,
-                                                       FineToCoarseBlock3DConnector::CFconnectorType connType) override;
-
-private:
-};
-#endif // Block3DConnectorFactory_h__
diff --git a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineBlock3DConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineBlock3DConnector.cpp
deleted file mode 100644
index d9c493e5d4cf88a66e4bc26090cd6d98aa68b4a7..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineBlock3DConnector.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-#include "CoarseToFineBlock3DConnector.h"
-
-////////////////////////////////////////////////////////////////////////////
-
-CoarseToFineBlock3DConnector::CoarseToFineBlock3DConnector(
-    SPtr<Block3D> block, VectorTransmitterPtr sender00, VectorTransmitterPtr receiver00, VectorTransmitterPtr sender01,
-    VectorTransmitterPtr receiver01, VectorTransmitterPtr sender10, VectorTransmitterPtr receiver10,
-    VectorTransmitterPtr sender11, VectorTransmitterPtr receiver11, int sendDir, InterpolationProcessorPtr iprocessor)
-    : Block3DConnector(sendDir), block(block), sender00(sender00), sender01(sender01), sender10(sender10),
-      sender11(sender11), receiver00(receiver00), receiver01(receiver01), receiver10(receiver10),
-      receiver11(receiver11), iprocessor(iprocessor)
-{
-    if (!(sendDir == D3Q27System::E || sendDir == D3Q27System::W || sendDir == D3Q27System::N ||
-          sendDir == D3Q27System::S || sendDir == D3Q27System::T || sendDir == D3Q27System::B ||
-          sendDir == D3Q27System::NE || sendDir == D3Q27System::SW || sendDir == D3Q27System::SE ||
-          sendDir == D3Q27System::NW || sendDir == D3Q27System::TE || sendDir == D3Q27System::BW ||
-          sendDir == D3Q27System::BE || sendDir == D3Q27System::TW || sendDir == D3Q27System::TN ||
-          sendDir == D3Q27System::BS || sendDir == D3Q27System::BN || sendDir == D3Q27System::TS ||
-          sendDir == D3Q27System::TNE || sendDir == D3Q27System::TNW || sendDir == D3Q27System::TSE ||
-          sendDir == D3Q27System::TSW || sendDir == D3Q27System::BNE || sendDir == D3Q27System::BNW ||
-          sendDir == D3Q27System::BSE || sendDir == D3Q27System::BSW)) {
-        throw UbException(UB_EXARGS, "invalid constructor for this direction");
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-bool CoarseToFineBlock3DConnector::isLocalConnector() { return !this->isRemoteConnector(); }
-//////////////////////////////////////////////////////////////////////////
-
-bool CoarseToFineBlock3DConnector::isRemoteConnector()
-{
-    return ((sender11 && sender11->isRemoteTransmitter()) || (receiver11 && receiver11->isRemoteTransmitter()) ||
-            (sender00 && sender00->isRemoteTransmitter()) || (receiver00 && receiver00->isRemoteTransmitter()) ||
-            (sender01 && sender01->isRemoteTransmitter()) || (receiver01 && receiver01->isRemoteTransmitter()) ||
-            (sender10 && sender10->isRemoteTransmitter()) || (receiver10 && receiver10->isRemoteTransmitter()));
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineBlock3DConnector::sendTransmitterDataSize()
-{
-    if (sender00) {
-        UBLOG(logDEBUG5, "CoarseToFineBlock3DConnector<VectorTransmitter>::sendTransmitterDataSize()-sender00 "
-                             << block.lock()->toString() << " sendDir=" << sendDir);
-        sender00->sendDataSize();
-    }
-    if (sender01) {
-        UBLOG(logDEBUG5, "CoarseToFineBlock3DConnector<VectorTransmitter>::sendTransmitterDataSize()-sender01 "
-                             << block.lock()->toString() << "sendDir=" << sendDir);
-        sender01->sendDataSize();
-    }
-    if (sender10) {
-        UBLOG(logDEBUG5, "CoarseToFineBlock3DConnector<VectorTransmitter>::sendTransmitterDataSize()-sender10 "
-                             << block.lock()->toString() + "sendDir=" << sendDir);
-        sender10->sendDataSize();
-    }
-    if (sender11) {
-        UBLOG(logDEBUG5, "CoarseToFineBlock3DConnector<VectorTransmitter>::sendTransmitterDataSize()-sender11 "
-                             << block.lock()->toString() << "sendDir=" << sendDir);
-        sender11->sendDataSize();
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineBlock3DConnector::receiveTransmitterDataSize()
-{
-    if (receiver00) {
-        UBLOG(logDEBUG5, "CoarseToFineBlock3DConnector<VectorTransmitter>::receiveTransmitterDataSize()-receiver00 "
-                             << block.lock()->toString() << "sendDir=" << sendDir);
-        receiver00->receiveDataSize();
-    }
-    if (receiver01) {
-        UBLOG(logDEBUG5, "CoarseToFineBlock3DConnector<VectorTransmitter>::receiveTransmitterDataSize()-receiver01 "
-                             << block.lock()->toString() << "sendDir=" << sendDir);
-        receiver01->receiveDataSize();
-    }
-    if (receiver10) {
-        UBLOG(logDEBUG5, "CoarseToFineBlock3DConnector<VectorTransmitter>::receiveTransmitterDataSize()-receiver10 "
-                             << block.lock()->toString() << "sendDir=" << sendDir);
-        receiver10->receiveDataSize();
-    }
-    if (receiver11) {
-        UBLOG(logDEBUG5, "CoarseToFineBlock3DConnector<VectorTransmitter>::receiveTransmitterDataSize()-receiver11 "
-                             << block.lock()->toString() << "sendDir=" << sendDir);
-        receiver11->receiveDataSize();
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineBlock3DConnector::prepareForSend()
-{
-    if (sender00)
-        sender00->prepareForSend();
-    if (sender01)
-        sender01->prepareForSend();
-    if (sender10)
-        sender10->prepareForSend();
-    if (sender11)
-        sender11->prepareForSend();
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineBlock3DConnector::sendVectors()
-{
-    if (sender00)
-        sender00->sendData();
-    if (sender01)
-        sender01->sendData();
-    if (sender10)
-        sender10->sendData();
-    if (sender11)
-        sender11->sendData();
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineBlock3DConnector::prepareForReceive()
-{
-    if (receiver00)
-        receiver00->prepareForReceive();
-    if (receiver01)
-        receiver01->prepareForReceive();
-    if (receiver10)
-        receiver10->prepareForReceive();
-    if (receiver11)
-        receiver11->prepareForReceive();
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineBlock3DConnector::receiveVectors()
-{
-    if (receiver00)
-        receiver00->receiveData();
-    if (receiver01)
-        receiver01->receiveData();
-    if (receiver10)
-        receiver10->receiveData();
-    if (receiver11)
-        receiver11->receiveData();
-}
diff --git a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineBlock3DConnector.h b/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineBlock3DConnector.h
deleted file mode 100644
index 6ca7c40bfaf22ebfed0c13b23e7973926a805427..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineBlock3DConnector.h
+++ /dev/null
@@ -1,94 +0,0 @@
-//! \file CoarseToFineBlock3DConnector.h
-//! \brief Base class for connectors that interpolates and sends data from coarse level to fine.
-//! \author Konstantin Kutscher
-//! \date 18.05.2015
-
-#ifndef CoarseToFineBlock3DConnector_H
-#define CoarseToFineBlock3DConnector_H
-
-#include "Block3D.h"
-#include "Block3DConnector.h"
-#include "D3Q27System.h"
-#include "InterpolationProcessor.h"
-#include "TransmitterType.h"
-#include <PointerDefinitions.h>
-
-class Block3D;
-
-//! \class CoarseToFineBlock3DConnector
-//! \brief Base class for connectors that interpolates and sends data from coarse level to fine.
-//! \details The data is copied in a vector (this is located in the transmitter).
-//! The vector is transmitted via transmitter.
-//! The transmitter can be a local, MPI, RCG, CTL or whatever
-//! which a transmitter that is derived from transmitter base class.
-//!
-//! four fine blocks inside a coarse block:
-//!
-//! |    |    |
-//! |:--:|:---|
-//! | 01 | 11 |
-//! | 00 | 10 |
-//!
-//! send direction:
-//!
-//! |E<->W   |  N<->S  |  T<->B |
-//! |--------|---------|--------|
-//! |  x3    |   x3    |    x2  |
-//! |  ^     |   ^     |    ^   |
-//! |  +->x2 |  +->x1  |   +->x1|
-
-class CoarseToFineBlock3DConnector : public Block3DConnector
-{
-public:
-    CoarseToFineBlock3DConnector(SPtr<Block3D> block, VectorTransmitterPtr sender00, VectorTransmitterPtr receiver00,
-                                 VectorTransmitterPtr sender01, VectorTransmitterPtr receiver01,
-                                 VectorTransmitterPtr sender10, VectorTransmitterPtr receiver10,
-                                 VectorTransmitterPtr sender11, VectorTransmitterPtr receiver11, int sendDir,
-                                 InterpolationProcessorPtr iprocessor);
-
-    ~CoarseToFineBlock3DConnector() override = default;
-
-    bool isLocalConnector() override;
-    bool isRemoteConnector() override;
-
-    void init() override = 0;
-
-    void sendTransmitterDataSize() override;
-    void receiveTransmitterDataSize() override;
-
-    void prepareForSend() override;
-    void sendVectors() override;
-
-    void prepareForReceive() override;
-    void receiveVectors() override;
-
-    void fillSendVectors() override          = 0;
-    void distributeReceiveVectors() override = 0;
-
-    bool isInterpolationConnectorCF() override { return true; }
-    bool isInterpolationConnectorFC() override { return false; }
-
-    void prepareForSendX1() override {}
-    void prepareForSendX2() override {}
-    void prepareForSendX3() override {}
-
-    void sendVectorsX1() override {}
-    void sendVectorsX2() override {}
-    void sendVectorsX3() override {}
-
-    void prepareForReceiveX1() override {}
-    void prepareForReceiveX2() override {}
-    void prepareForReceiveX3() override {}
-
-    void receiveVectorsX1() override {}
-    void receiveVectorsX2() override {}
-    void receiveVectorsX3() override {}
-
-protected:
-    WPtr<Block3D> block; // dieser nvd sendet daten und die empfangenen werden diesem nvd zugeordnet
-    VectorTransmitterPtr sender00, receiver00, sender01, receiver01, sender10, receiver10, sender11, receiver11;
-
-    InterpolationProcessorPtr iprocessor;
-};
-
-#endif
diff --git a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineNodeSetBlock3DConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineNodeSetBlock3DConnector.cpp
deleted file mode 100644
index 36553307d937c07c19f792a7a6e40166d5d04723..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineNodeSetBlock3DConnector.cpp
+++ /dev/null
@@ -1,1293 +0,0 @@
-#include "CoarseToFineNodeSetBlock3DConnector.h"
-#include "DataSet3D.h"
-
-////////////////////////////////////////////////////////////////////////////
-CoarseToFineNodeSetBlock3DConnector::CoarseToFineNodeSetBlock3DConnector(
-    SPtr<Block3D> block, VectorTransmitterPtr sender00, VectorTransmitterPtr receiver00, VectorTransmitterPtr sender01,
-    VectorTransmitterPtr receiver01, VectorTransmitterPtr sender10, VectorTransmitterPtr receiver10,
-    VectorTransmitterPtr sender11, VectorTransmitterPtr receiver11, int sendDir, InterpolationProcessorPtr iprocessor)
-    : CoarseToFineBlock3DConnector(block, sender00, receiver00, sender01, receiver01, sender10, receiver10, sender11,
-                                   receiver11, sendDir, iprocessor)
-{
-}
-//////////////////////////////////////////////////////////////////////////
-void CoarseToFineNodeSetBlock3DConnector::init()
-{
-    bMaxX1 = (int)block.lock()->getKernel()->getDataSet()->getFdistributions()->getNX1();
-    bMaxX2 = (int)block.lock()->getKernel()->getDataSet()->getFdistributions()->getNX2();
-    bMaxX3 = (int)block.lock()->getKernel()->getDataSet()->getFdistributions()->getNX3();
-
-    minX1 = 0;
-    minX2 = 0;
-    minX3 = 0;
-    maxX1 = bMaxX1 - 1;
-    maxX2 = bMaxX2 - 1;
-    maxX3 = bMaxX3 - 1;
-
-    minHalfX1 = 0;
-    minHalfX2 = 0;
-    minHalfX3 = 0;
-
-    maxHalfX1 = 0;
-    maxHalfX2 = 0;
-    maxHalfX3 = 0;
-
-    if (Utilities::isEven(bMaxX1)) {
-        minHalfX1 = bMaxX1 / 2 - 1;
-        maxHalfX1 = bMaxX1 / 2 - 1;
-    } else if (Utilities::isOdd(bMaxX1)) {
-        minHalfX1 = bMaxX1 / 2;
-        maxHalfX1 = bMaxX1 / 2 - 1;
-    }
-
-    if (Utilities::isEven(bMaxX2)) {
-        minHalfX2 = bMaxX2 / 2 - 1;
-        maxHalfX2 = bMaxX2 / 2 - 1;
-    } else if (Utilities::isOdd(bMaxX2)) {
-        minHalfX2 = bMaxX2 / 2;
-        maxHalfX2 = bMaxX2 / 2 - 1;
-    }
-
-    if (Utilities::isEven(bMaxX3)) {
-        minHalfX3 = bMaxX3 / 2 - 1;
-        maxHalfX3 = bMaxX3 / 2 - 1;
-    } else if (Utilities::isOdd(bMaxX3)) {
-        minHalfX3 = bMaxX3 / 2;
-        maxHalfX3 = bMaxX3 / 2 - 1;
-    }
-
-    // int       sendSize = 0;
-    LBMReal initValue = -999.0;
-
-    int sendDataPerNode = 27 /*f*/;
-    int iCellSize       = 8; // size of interpolation cell
-
-    findCFCells();
-    findFCCells();
-
-    //////////////////////////////////////////////////////
-    // Debug
-    //////////////////////////////////////////////////////
-    //   if (block.lock()->getGlobalID() == 2234)
-    //   {
-    //      int test = 0;
-    //   }
-
-    if (sender00)
-        sender00->getData().resize(iNodeSetSender00.size() * iCellSize * sendDataPerNode, initValue);
-    else
-        sender00 = VectorTransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-    if (sender01)
-        sender01->getData().resize(iNodeSetSender01.size() * iCellSize * sendDataPerNode, initValue);
-    else
-        sender01 = VectorTransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-    if (sender10)
-        sender10->getData().resize(iNodeSetSender10.size() * iCellSize * sendDataPerNode, initValue);
-    else
-        sender10 = VectorTransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-    if (sender11)
-        sender11->getData().resize(iNodeSetSender11.size() * iCellSize * sendDataPerNode, initValue);
-    else
-        sender11 = VectorTransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-
-    if (!receiver00)
-        receiver00 = VectorTransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-    if (!receiver01)
-        receiver01 = VectorTransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-    if (!receiver10)
-        receiver10 = VectorTransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-    if (!receiver11)
-        receiver11 = VectorTransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineNodeSetBlock3DConnector::findCFCells(int lMinX1, int lMinX2, int lMinX3, int lMaxX1, int lMaxX2,
-                                                      int lMaxX3, INodeSet &inodes)
-{
-    int ix1, ix2, ix3;
-    LBMReal x1off, x2off, x3off;
-
-    SPtr<DistributionArray3D> fFrom = block.lock()->getKernel()->getDataSet()->getFdistributions();
-    SPtr<BCArray3D> bcArray         = block.lock()->getKernel()->getBCProcessor()->getBCArray();
-
-    for (ix3 = lMinX3; ix3 <= lMaxX3; ix3++) {
-        for (ix2 = lMinX2; ix2 <= lMaxX2; ix2++) {
-            for (ix1 = lMinX1; ix1 <= lMaxX1; ix1++) {
-                D3Q27ICell icellC;
-
-                int howManySolids = iprocessor->iCellHowManySolids(bcArray, ix1, ix2, ix3);
-
-                if (howManySolids == 0 || howManySolids == 8) {
-                    x1off = 0.0;
-                    x2off = 0.0;
-                    x3off = 0.0;
-                } else {
-                    if (!iprocessor->findNeighborICell(bcArray, fFrom, icellC, bMaxX1, bMaxX2, bMaxX3, ix1, ix2, ix3,
-                                                       x1off, x2off, x3off)) {
-                        std::string err = "For " + block.lock()->toString() + " x1=" + UbSystem::toString(ix1) +
-                                          ", x2=" + UbSystem::toString(ix2) + ", x3=" + UbSystem::toString(ix3) +
-                                          " interpolation is not implemented for other direction" +
-                                          " by using in: " + (std::string) typeid(*this).name() +
-                                          " or maybe you have a solid on the block boundary";
-                        UB_THROW(UbException(UB_EXARGS, err));
-                    }
-                }
-
-                INodeVector inv;
-                inv.push_back(ix1 + (int)x1off);
-                inv.push_back(ix2 + (int)x2off);
-                inv.push_back(ix3 + (int)x3off);
-                inv.push_back((int)x1off);
-                inv.push_back((int)x2off);
-                inv.push_back((int)x3off);
-                // inodes.insert(inv);
-                inodes.push_back(inv);
-            }
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-// template< typename VectorTransmitter >
-void CoarseToFineNodeSetBlock3DConnector::findCFCells()
-{
-    using namespace D3Q27System;
-
-    int lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3;
-
-    switch (sendDir) {
-            // faces
-        case E:
-        case W:
-            if (sendDir == E) {
-                lMinX1 = maxX1 - 2;
-                lMaxX1 = lMinX1;
-            } else if (sendDir == W) {
-                lMinX1 = 1;
-                lMaxX1 = lMinX1;
-            }
-
-            if (sender00) {
-                lMinX2 = minX2;
-                lMaxX2 = maxHalfX2;
-                lMinX3 = minX3;
-                lMaxX3 = maxHalfX3;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender00);
-            }
-            if (sender10) {
-                lMinX2 = minHalfX2;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = minX3;
-                lMaxX3 = maxHalfX3;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender10);
-            }
-            if (sender01) {
-                lMinX2 = minX2;
-                lMaxX2 = maxHalfX2;
-                lMinX3 = minHalfX3;
-                lMaxX3 = maxX3 - 1;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender01);
-            }
-            if (sender11) {
-                lMinX2 = minHalfX2;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = minHalfX3;
-                lMaxX3 = maxX3 - 1;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender11);
-            }
-            break;
-        case N:
-        case S:
-            if (sendDir == N) {
-                lMinX2 = maxX2 - 2;
-                lMaxX2 = lMinX2;
-            } else if (sendDir == S) {
-                lMinX2 = 1;
-                lMaxX2 = lMinX2;
-            }
-
-            if (sender00) {
-                lMinX1 = minX1;
-                lMaxX1 = maxHalfX1;
-                lMinX3 = minX3;
-                lMaxX3 = maxHalfX3;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender00);
-            }
-            if (sender10) {
-                lMinX1 = minHalfX1;
-                lMaxX1 = maxX1 - 1;
-                lMinX3 = minX3;
-                lMaxX3 = maxHalfX3;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender10);
-            }
-            if (sender01) {
-                lMinX1 = minX1;
-                lMaxX1 = maxHalfX1;
-                lMinX3 = minHalfX3;
-                lMaxX3 = maxX3 - 1;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender01);
-            }
-            if (sender11) {
-                lMinX1 = minHalfX1;
-                lMaxX1 = maxX1 - 1;
-                lMinX3 = minHalfX3;
-                lMaxX3 = maxX3 - 1;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender11);
-            }
-            break;
-        case T:
-        case B:
-            if (sendDir == T) {
-                lMinX3 = maxX3 - 2;
-                lMaxX3 = lMinX3;
-            } else if (sendDir == B) {
-                lMinX3 = 1;
-                lMaxX3 = lMinX3;
-            }
-
-            if (sender00) {
-                lMinX1 = minX1;
-                lMaxX1 = maxHalfX1;
-                lMinX2 = minX2;
-                lMaxX2 = maxHalfX2;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender00);
-            }
-            if (sender10) {
-                lMinX1 = minHalfX1;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = minX2;
-                lMaxX2 = maxHalfX2;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender10);
-            }
-            if (sender01) {
-                lMinX1 = minX1;
-                lMaxX1 = maxHalfX1;
-                lMinX2 = minHalfX2;
-                lMaxX2 = maxX2 - 1;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender01);
-            }
-            if (sender11) {
-                lMinX1 = minHalfX1;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = minHalfX2;
-                lMaxX2 = maxX2 - 1;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender11);
-            }
-            break;
-            // edges
-            // N-S-E-W
-        case NE:
-        case SW:
-        case SE:
-        case NW:
-            if (sendDir == NE) {
-                lMinX1 = maxX1 - 2;
-                lMaxX1 = lMinX1 + 1;
-                lMinX2 = maxX2 - 2;
-                lMaxX2 = lMinX2 + 1;
-            } else if (sendDir == SW) {
-                lMinX1 = 0;
-                lMaxX1 = lMinX1 + 1;
-                lMinX2 = 0;
-                lMaxX2 = lMinX2 + 1;
-            } else if (sendDir == SE) {
-                lMinX1 = maxX1 - 2;
-                lMaxX1 = lMinX1 + 1;
-                lMinX2 = 0;
-                lMaxX2 = lMinX2 + 1;
-            } else if (sendDir == NW) {
-                lMinX1 = 0;
-                lMaxX1 = lMinX1 + 1;
-                lMinX2 = maxX2 - 2;
-                lMaxX2 = lMinX2 + 1;
-            }
-
-            if (sender00) {
-                lMinX3 = minX3;
-                lMaxX3 = maxHalfX3;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender00);
-            }
-            if (sender10) {
-                lMinX3 = minHalfX3;
-                lMaxX3 = maxX3 - 1;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender10);
-            }
-            break;
-            // T-B-E-W
-        case TE:
-        case BW:
-        case BE:
-        case TW:
-            if (sendDir == TE) {
-                lMinX1 = maxX1 - 2;
-                lMaxX1 = lMinX1 + 1;
-                lMinX3 = maxX3 - 2;
-                lMaxX3 = lMinX3 + 1;
-            } else if (sendDir == BW) {
-                lMinX1 = 0;
-                lMaxX1 = lMinX1 + 2;
-                lMinX3 = 0;
-                lMaxX3 = lMinX3 + 2;
-            } else if (sendDir == BE) {
-                lMinX1 = maxX1 - 2;
-                lMaxX1 = lMinX1 + 1;
-                lMinX3 = 0;
-                lMaxX3 = lMinX3 + 1;
-            } else if (sendDir == TW) {
-                lMinX1 = 0;
-                lMaxX1 = lMinX1 + 1;
-                lMinX3 = maxX3 - 2;
-                lMaxX3 = lMinX3 + 1;
-            }
-
-            if (sender00) {
-                lMinX2 = minX2;
-                lMaxX2 = maxHalfX2;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender00);
-            }
-            if (sender10) {
-                lMinX2 = minHalfX2;
-                lMaxX2 = maxX2 - 1;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender10);
-            }
-            break;
-            // T-B-N-S
-        case TN:
-        case BS:
-        case BN:
-        case TS:
-            if (sendDir == TN) {
-                lMinX2 = maxX2 - 2;
-                lMaxX2 = lMinX2 + 1;
-                lMinX3 = maxX3 - 3;
-                lMaxX3 = lMinX3 + 1;
-            } else if (sendDir == BS) {
-                lMinX2 = 0;
-                lMaxX2 = lMinX2 + 1;
-                lMinX3 = 0;
-                lMaxX3 = lMinX3 + 1;
-            } else if (sendDir == BN) {
-                lMinX2 = maxX2 - 2;
-                lMaxX2 = lMinX2 + 1;
-                lMinX3 = 0;
-                lMaxX3 = lMinX3 + 1;
-            } else if (sendDir == TS) {
-                lMinX2 = 0;
-                lMaxX2 = lMinX2 + 1;
-                lMinX3 = maxX3 - 2;
-                lMaxX3 = lMinX3 + 1;
-            }
-
-            if (sender00) {
-                lMinX1 = minX1;
-                lMaxX1 = maxHalfX1;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender00);
-            }
-            if (sender10) {
-                lMinX1 = minHalfX1;
-                lMaxX1 = maxX1 - 1;
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender10);
-            }
-            break;
-            // corners
-        case TNE:
-        case TNW:
-        case TSE:
-        case TSW:
-        case BNE:
-        case BNW:
-        case BSE:
-        case BSW:
-            if (sendDir == TNE) {
-                lMinX1 = maxX1 - 2;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = maxX2 - 2;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = maxX3 - 2;
-                lMaxX3 = maxX3 - 1;
-            } else if (sendDir == TNW) {
-                lMinX1 = 0;
-                lMaxX1 = 1;
-                lMinX2 = maxX2 - 2;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = maxX3 - 2;
-                lMaxX3 = maxX3 - 1;
-            } else if (sendDir == TSE) {
-                lMinX1 = maxX1 - 2;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = 0;
-                lMaxX2 = 1;
-                lMinX3 = maxX3 - 2;
-                lMaxX3 = maxX3 - 1;
-            } else if (sendDir == TSW) {
-                lMinX1 = 0;
-                lMaxX1 = 1;
-                lMinX2 = 0;
-                lMaxX2 = 1;
-                lMinX3 = maxX3 - 2;
-                lMaxX3 = maxX3 - 1;
-            } else if (sendDir == BNE) {
-                lMinX1 = maxX1 - 2;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = maxX2 - 2;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = 0;
-                lMaxX3 = 1;
-            } else if (sendDir == BNW) {
-                lMinX1 = 0;
-                lMaxX1 = 1;
-                lMinX2 = maxX2 - 2;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = 0;
-                lMaxX3 = 1;
-            } else if (sendDir == BSE) {
-                lMinX1 = maxX1 - 2;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = 0;
-                lMaxX2 = 1;
-                lMinX3 = 0;
-                lMaxX3 = 1;
-            } else if (sendDir == BSW) {
-                lMinX1 = 0;
-                lMaxX1 = 1;
-                lMinX2 = 0;
-                lMaxX2 = 1;
-                lMinX3 = 0;
-                lMaxX3 = 1;
-            }
-            if (sender00) {
-                findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetSender00);
-            }
-            break;
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-// template< typename VectorTransmitter >
-void CoarseToFineNodeSetBlock3DConnector::fillSendVectors()
-{
-    using namespace D3Q27System;
-
-    SPtr<DistributionArray3D> fFrom = block.lock()->getKernel()->getDataSet()->getFdistributions();
-
-    int index00 = 0;
-    int index01 = 0;
-    int index10 = 0;
-    int index11 = 0;
-
-    vector_type &data00 = this->sender00->getData();
-    vector_type &data01 = this->sender01->getData();
-    vector_type &data10 = this->sender10->getData();
-    vector_type &data11 = this->sender11->getData();
-
-    for (INodeVector inode : iNodeSetSender00) {
-        D3Q27ICell icellC;
-        D3Q27ICell icellF;
-        iprocessor->readICell(fFrom, icellC, inode[0], inode[1], inode[2]);
-        iprocessor->interpolateCoarseToFine(icellC, icellF, inode[3], inode[4], inode[5]);
-        writeICellFtoData(data00, index00, icellF);
-    }
-    for (INodeVector inode : iNodeSetSender01) {
-        D3Q27ICell icellC;
-        D3Q27ICell icellF;
-        iprocessor->readICell(fFrom, icellC, inode[0], inode[1], inode[2]);
-        iprocessor->interpolateCoarseToFine(icellC, icellF, inode[3], inode[4], inode[5]);
-        writeICellFtoData(data01, index01, icellF);
-    }
-    for (INodeVector inode : iNodeSetSender10) {
-        D3Q27ICell icellC;
-        D3Q27ICell icellF;
-        iprocessor->readICell(fFrom, icellC, inode[0], inode[1], inode[2]);
-        iprocessor->interpolateCoarseToFine(icellC, icellF, inode[3], inode[4], inode[5]);
-        writeICellFtoData(data10, index10, icellF);
-    }
-    for (INodeVector inode : iNodeSetSender11) {
-        D3Q27ICell icellC;
-        D3Q27ICell icellF;
-        iprocessor->readICell(fFrom, icellC, inode[0], inode[1], inode[2]);
-        iprocessor->interpolateCoarseToFine(icellC, icellF, inode[3], inode[4], inode[5]);
-        writeICellFtoData(data11, index11, icellF);
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineNodeSetBlock3DConnector::writeICellFtoData(vector_type &data, int &index, D3Q27ICell &icellF)
-{
-    writeNodeToVector(data, index, icellF.BSW);
-    writeNodeToVector(data, index, icellF.BSE);
-    writeNodeToVector(data, index, icellF.BNW);
-    writeNodeToVector(data, index, icellF.BNE);
-    writeNodeToVector(data, index, icellF.TSW);
-    writeNodeToVector(data, index, icellF.TSE);
-    writeNodeToVector(data, index, icellF.TNW);
-    writeNodeToVector(data, index, icellF.TNE);
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineNodeSetBlock3DConnector::writeNodeToVector(vector_type &data, int &index, LBMReal *inode)
-{
-    for (int i = D3Q27System::STARTF; i < D3Q27System::ENDF + 1; i++) {
-        data[index++] = inode[i];
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineNodeSetBlock3DConnector::findFCCells(int lMinX1, int lMinX2, int lMinX3, int lMaxX1, int lMaxX2,
-                                                      int lMaxX3, INodeSet &inodes)
-{
-    int ix1, ix2, ix3;
-
-    for (ix3 = lMinX3; ix3 <= lMaxX3; ix3++) {
-        for (ix2 = lMinX2; ix2 <= lMaxX2; ix2++) {
-            for (ix1 = lMinX1; ix1 <= lMaxX1; ix1++) {
-                INodeVector inv;
-                inv.push_back(ix1);
-                inv.push_back(ix2);
-                inv.push_back(ix3);
-                // inodes.insert(inv);
-                inodes.push_back(inv);
-            }
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-// template< typename VectorTransmitter >
-void CoarseToFineNodeSetBlock3DConnector::findFCCells()
-{
-    using namespace D3Q27System;
-
-    int lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3;
-    int lMin2X1, lMin2X2, lMin2X3, lMax2X1, lMax2X2, lMax2X3;
-    int lMin3X1, lMin3X2, lMin3X3, lMax3X1, lMax3X2, lMax3X3;
-    int dummy;
-
-    switch (sendDir) {
-
-            //////////////////////////////////////////////////////
-            // Debug
-            //////////////////////////////////////////////////////
-            // if (block.lock()->getGlobalID() == 2234)
-            // {
-            //    int test = 0;
-            // }
-
-            // faces
-        case E:
-        case W:
-            if (sendDir == E) {
-                lMin1X1 = maxX1 - 3;
-                lMax1X1 = lMin1X1;
-            } else if (sendDir == W) {
-                lMin1X1 = 3;
-                lMax1X1 = lMin1X1;
-            }
-
-            // int TminX1 = lMinX1; int TminX2 = lMinX2; int TminX3 = lMinX3; int TmaxX1 = lMaxX1; int TmaxX2 = lMaxX2;
-            // int TmaxX3 = lMaxX3;
-
-            // if (block.lock()->hasInterpolationFlagCF(E))
-            //{
-            //   if (maxX1==TmaxX1) maxX1 -= 2;
-            //}
-            // if (block.lock()->hasInterpolationFlagCF(W))
-            //{
-            //   if (minX1==TminX1) minX1 += 2;
-            //}
-            // if (block.lock()->hasInterpolationFlagCF(N))
-            //{
-            //   if (maxX2==TmaxX2)  maxX2 -= 2;
-            //}
-            // if (block.lock()->hasInterpolationFlagCF(S))
-            //{
-            //   if (minX2==TminX2)  minX2 += 2;
-            //}
-            // if (block.lock()->hasInterpolationFlagCF(T))
-            //{
-            //   if (maxX3==TmaxX3)  maxX3 -= 2;
-            //}
-            // if (block.lock()->hasInterpolationFlagCF(B))
-            //{
-            //   if (minX3==TminX3)  minX3 += 2;
-            //}
-            if (receiver00) {
-                lMin1X2 = minX2;
-                lMax1X2 = maxHalfX2;
-                lMin1X3 = minX3;
-                lMax1X3 = maxHalfX3;
-                getLocalMinMax(dummy, lMin1X2, lMin1X3, dummy, dummy, dummy);
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver00);
-            }
-            if (receiver10) {
-                lMin1X2 = minHalfX2;
-                lMax1X2 = maxX2 - 1;
-                lMin1X3 = minX3;
-                lMax1X3 = maxHalfX3;
-                getLocalMinMax(dummy, dummy, lMin1X3, dummy, lMax1X2, dummy);
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver10);
-            }
-            if (receiver01) {
-                lMin1X2 = minX2;
-                lMax1X2 = maxHalfX2;
-                lMin1X3 = minHalfX3;
-                lMax1X3 = maxX3 - 1;
-                getLocalMinMax(dummy, lMin1X2, dummy, dummy, dummy, lMax1X3);
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver01);
-            }
-            if (receiver11) {
-                lMin1X2 = minHalfX2;
-                lMax1X2 = maxX2 - 1;
-                lMin1X3 = minHalfX3;
-                lMax1X3 = maxX3 - 1;
-                getLocalMinMax(dummy, dummy, dummy, dummy, lMax1X2, lMax1X3);
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver11);
-            }
-            break;
-        case N:
-        case S:
-            if (sendDir == N) {
-                lMin1X2 = maxX2 - 3;
-                lMax1X2 = lMin1X2;
-            } else if (sendDir == S) {
-                lMin1X2 = 3;
-                lMax1X2 = lMin1X2;
-            }
-
-            if (receiver00) {
-                lMin1X1 = minX1;
-                lMax1X1 = maxHalfX1;
-                lMin1X3 = minX3;
-                lMax1X3 = maxHalfX3;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver00);
-            }
-            if (receiver10) {
-                lMin1X1 = minHalfX1;
-                lMax1X1 = maxX1 - 1;
-                lMin1X3 = minX3;
-                lMax1X3 = maxHalfX3;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver10);
-            }
-            if (receiver01) {
-                lMin1X1 = minX1;
-                lMax1X1 = maxHalfX1;
-                lMin1X3 = minHalfX3;
-                lMax1X3 = maxX3 - 1;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver01);
-            }
-            if (receiver11) {
-                lMin1X1 = minHalfX1;
-                lMax1X1 = maxX1 - 1;
-                lMin1X3 = minHalfX3;
-                lMax1X3 = maxX3 - 1;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver11);
-            }
-            break;
-        case T:
-        case B:
-            if (sendDir == T) {
-                lMin1X3 = maxX3 - 3;
-                lMax1X3 = lMin1X3;
-            } else if (sendDir == B) {
-                lMin1X3 = 3;
-                lMax1X3 = lMin1X3;
-            }
-
-            if (receiver00) {
-                lMin1X1 = minX1;
-                lMax1X1 = maxHalfX1;
-                lMin1X2 = minX2;
-                lMax1X2 = maxHalfX2;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver00);
-            }
-            if (receiver10) {
-                lMin1X1 = minHalfX1;
-                lMax1X1 = maxX1 - 1;
-                lMin1X2 = minX2;
-                lMax1X2 = maxHalfX2;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver10);
-            }
-            if (receiver01) {
-                lMin1X1 = minX1;
-                lMax1X1 = maxHalfX1;
-                lMin1X2 = minHalfX2;
-                lMax1X2 = maxX2 - 1;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver01);
-            }
-            if (receiver11) {
-                lMin1X1 = minHalfX1;
-                lMax1X1 = maxX1 - 1;
-                lMin1X2 = minHalfX2;
-                lMax1X2 = maxX2 - 1;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver11);
-            }
-            break;
-            // edges
-            // N-S-E-W
-        case NE:
-        case SW:
-        case SE:
-        case NW:
-            if (sendDir == NE) {
-                lMin1X1 = maxX1 - 3;
-                lMax1X1 = lMin1X1 + 2;
-                lMin1X2 = maxX2 - 3;
-                lMax1X2 = lMin1X2;
-
-                lMin2X1 = maxX1 - 3;
-                lMax2X1 = lMin2X1;
-                lMin2X2 = maxX2 - 3;
-                lMax2X2 = lMin2X2 + 2;
-            } else if (sendDir == SW) {
-                lMin1X1 = 1;
-                lMax1X1 = lMin1X1 + 2;
-                lMin1X2 = 3;
-                lMax1X2 = lMin1X2;
-
-                lMin2X1 = 3;
-                lMax2X1 = lMin2X1;
-                lMin2X2 = 1;
-                lMax2X2 = lMin2X2 + 2;
-            } else if (sendDir == SE) {
-                lMin1X1 = maxX1 - 3;
-                lMax1X1 = lMin1X1 + 2;
-                lMin1X2 = 3;
-                lMax1X2 = lMin1X2;
-
-                lMin2X1 = maxX1 - 3;
-                lMax2X1 = lMin2X1;
-                lMin2X2 = 1;
-                lMax2X2 = lMin2X2 + 2;
-            } else if (sendDir == NW) {
-                lMin1X1 = 1;
-                lMax1X1 = lMin1X1 + 2;
-                lMin1X2 = maxX2 - 3;
-                lMax1X2 = lMin1X2;
-
-                lMin2X1 = 3;
-                lMax2X1 = lMin2X1;
-                lMin2X2 = maxX2 - 3;
-                lMax2X2 = lMin2X2 + 2;
-            }
-
-            if (receiver00) {
-                lMin1X3 = minX3;
-                lMax1X3 = maxHalfX3;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver00);
-            }
-            if (receiver10) {
-                lMin1X3 = minHalfX3;
-                lMax1X3 = maxX3 - 1;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver10);
-            }
-
-            if (receiver00) {
-                lMin2X3 = minX3;
-                lMax2X3 = maxHalfX3;
-                findFCCells(lMin2X1, lMin2X2, lMin2X3, lMax2X1, lMax2X2, lMax2X3, iNodeSetReceiver00);
-            }
-            if (receiver10) {
-                lMin2X3 = minHalfX3;
-                lMax2X3 = maxX3 - 1;
-                findFCCells(lMin2X1, lMin2X2, lMin2X3, lMax2X1, lMax2X2, lMax2X3, iNodeSetReceiver10);
-            }
-            break;
-            // T-B-E-W
-        case TE:
-        case BW:
-        case BE:
-        case TW:
-            if (sendDir == TE) {
-                lMin1X1 = maxX1 - 3;
-                lMax1X1 = lMin1X1 + 2;
-                lMin1X3 = maxX3 - 3;
-                lMax1X3 = lMin1X3;
-
-                lMin2X1 = maxX1 - 3;
-                lMax2X1 = lMin2X1;
-                lMin2X3 = maxX3 - 3;
-                lMax2X3 = lMin2X3 + 2;
-            } else if (sendDir == BW) {
-                lMin1X1 = 1;
-                lMax1X1 = lMin1X1 + 2;
-                lMin1X3 = 3;
-                lMax1X3 = lMin1X3;
-
-                lMin2X1 = 3;
-                lMax2X1 = lMin2X1;
-                lMin2X3 = 1;
-                lMax2X3 = lMin2X3 + 2;
-            } else if (sendDir == BE) {
-                lMin1X1 = maxX1 - 3;
-                lMax1X1 = lMin1X1 + 2;
-                lMin1X3 = 3;
-                lMax1X3 = lMin1X3;
-
-                lMin2X1 = maxX1 - 3;
-                lMax2X1 = lMin2X1;
-                lMin2X3 = 1;
-                lMax2X3 = lMin2X3 + 2;
-            } else if (sendDir == TW) {
-                lMin1X1 = 1;
-                lMax1X1 = lMin1X1 + 2;
-                lMin1X3 = maxX3 - 3;
-                lMax1X3 = lMin1X3;
-
-                lMin2X1 = 3;
-                lMax2X1 = lMin2X1;
-                lMin2X3 = maxX3 - 3;
-                lMax2X3 = lMin2X3 + 2;
-            }
-
-            if (receiver00) {
-                lMin1X2 = minX2;
-                lMax1X2 = maxHalfX2;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver00);
-            }
-            if (receiver10) {
-                lMin1X2 = minHalfX2;
-                lMax1X2 = maxX2 - 1;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver10);
-            }
-
-            if (receiver00) {
-                lMin2X2 = minX2;
-                lMax2X2 = maxHalfX2;
-                findFCCells(lMin2X1, lMin2X2, lMin2X3, lMax2X1, lMax2X2, lMax2X3, iNodeSetReceiver00);
-            }
-            if (receiver10) {
-                lMin2X2 = minHalfX2;
-                lMax2X2 = maxX2 - 1;
-                findFCCells(lMin2X1, lMin2X2, lMin2X3, lMax2X1, lMax2X2, lMax2X3, iNodeSetReceiver10);
-            }
-            break;
-            // T-B-N-S
-        case TN:
-        case BS:
-        case BN:
-        case TS:
-            if (sendDir == TN) {
-                lMin1X2 = maxX2 - 3;
-                lMax1X2 = lMin1X2 + 2;
-                lMin1X3 = maxX3 - 3;
-                lMax1X3 = lMin1X3;
-
-                lMin2X2 = maxX2 - 3;
-                lMax2X2 = lMin2X2;
-                lMin2X3 = maxX3 - 3;
-                lMax2X3 = lMin2X3 + 2;
-            } else if (sendDir == BS) {
-                lMin1X2 = 1;
-                lMax1X2 = lMin1X2 + 2;
-                lMin1X3 = 3;
-                lMax1X3 = lMin1X3;
-
-                lMin2X2 = 3;
-                lMax2X2 = lMin2X2;
-                lMin2X3 = 1;
-                lMax2X3 = lMin2X3 + 2;
-            } else if (sendDir == BN) {
-                lMin1X2 = maxX2 - 3;
-                lMax1X2 = lMin1X2 + 2;
-                lMin1X3 = 3;
-                lMax1X3 = lMin1X3;
-
-                lMin2X2 = maxX2 - 3;
-                lMax2X2 = lMin2X2;
-                lMin2X3 = 1;
-                lMax2X3 = lMin2X3 + 2;
-            } else if (sendDir == TS) {
-                lMin1X2 = 1;
-                lMax1X2 = lMin1X2 + 2;
-                lMin1X3 = maxX3 - 3;
-                lMax1X3 = lMin1X3;
-
-                lMin2X2 = 3;
-                lMax2X2 = lMin2X2;
-                lMin2X3 = maxX3 - 3;
-                lMax2X3 = lMin2X3 + 2;
-            }
-
-            if (receiver00) {
-                lMin1X1 = minX1;
-                lMax1X1 = maxHalfX1;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver00);
-            }
-            if (receiver10) {
-                lMin1X1 = minHalfX1;
-                lMax1X1 = maxX1 - 1;
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver10);
-            }
-
-            if (receiver00) {
-                lMin2X1 = minX1;
-                lMax2X1 = maxHalfX1;
-                findFCCells(lMin2X1, lMin2X2, lMin2X3, lMax2X1, lMax2X2, lMax2X3, iNodeSetReceiver00);
-            }
-            if (receiver10) {
-                lMin2X1 = minHalfX1;
-                lMax2X1 = maxX1 - 1;
-                findFCCells(lMin2X1, lMin2X2, lMin2X3, lMax2X1, lMax2X2, lMax2X3, iNodeSetReceiver10);
-            }
-            break;
-            // corners
-        case TNE:
-        case TNW:
-        case TSE:
-        case TSW:
-        case BNE:
-        case BNW:
-        case BSE:
-        case BSW:
-            if (sendDir == TNE) {
-                lMin1X1 = maxX1 - 3;
-                lMax1X1 = maxX1 - 2;
-                lMin1X2 = maxX2 - 3;
-                lMax1X2 = maxX2 - 1;
-                lMin1X3 = maxX3 - 3;
-                lMax1X3 = maxX3 - 1;
-
-                lMin2X1 = maxX1 - 3;
-                lMax2X1 = maxX1 - 1;
-                lMin2X2 = maxX2 - 3;
-                lMax2X2 = maxX2 - 2;
-                lMin2X3 = maxX3 - 3;
-                lMax2X3 = maxX3 - 1;
-
-                lMin3X1 = maxX1 - 3;
-                lMax3X1 = maxX1 - 1;
-                lMin3X2 = maxX2 - 3;
-                lMax3X2 = maxX2 - 1;
-                lMin3X3 = maxX3 - 3;
-                lMax3X3 = maxX3 - 2;
-            } else if (sendDir == TNW) {
-                lMin1X1 = 3;
-                lMax1X1 = 3;
-                lMin1X2 = maxX2 - 3;
-                lMax1X2 = maxX2 - 1;
-                lMin1X3 = maxX3 - 3;
-                lMax1X3 = maxX3 - 1;
-
-                lMin2X1 = 1;
-                lMax2X1 = 3;
-                lMin2X2 = maxX2 - 3;
-                lMax2X2 = maxX2 - 2;
-                lMin2X3 = maxX3 - 3;
-                lMax2X3 = maxX3;
-
-                lMin3X1 = 1;
-                lMax3X1 = 3;
-                lMin3X2 = maxX2 - 3;
-                lMax3X2 = maxX2 - 1;
-                lMin3X3 = maxX3 - 3;
-                lMax3X3 = maxX3 - 2;
-            } else if (sendDir == TSE) {
-                lMin1X1 = maxX1 - 3;
-                lMax1X1 = maxX1 - 2;
-                lMin1X2 = 1;
-                lMax1X2 = 3;
-                lMin1X3 = maxX3 - 3;
-                lMax1X3 = maxX3;
-
-                lMin2X1 = maxX1 - 3;
-                lMax2X1 = maxX1 - 1;
-                lMin2X2 = 3;
-                lMax2X2 = 3;
-                lMin2X3 = maxX3 - 3;
-                lMax2X3 = maxX3;
-
-                lMin3X1 = maxX1 - 3;
-                lMax3X1 = maxX1 - 1;
-                lMin3X2 = 1;
-                lMax3X2 = 3;
-                lMin3X3 = maxX3 - 3;
-                lMax3X3 = maxX3 - 2;
-            } else if (sendDir == TSW) {
-                lMin1X1 = 3;
-                lMax1X1 = 3;
-                lMin1X2 = 1;
-                lMax1X2 = 3;
-                lMin1X3 = maxX3 - 3;
-                lMax1X3 = maxX3 - 1;
-
-                lMin2X1 = 1;
-                lMax2X1 = 3;
-                lMin2X2 = 3;
-                lMax2X2 = 3;
-                lMin2X3 = maxX3 - 3;
-                lMax2X3 = maxX3 - 1;
-
-                lMin3X1 = 1;
-                lMax3X1 = 3;
-                lMin3X2 = 1;
-                lMax3X2 = 3;
-                lMin3X3 = maxX3 - 3;
-                lMax3X3 = maxX3 - 2;
-            } else if (sendDir == BNE) {
-                lMin1X1 = maxX1 - 3;
-                lMax1X1 = maxX1 - 2;
-                lMin1X2 = maxX2 - 3;
-                lMax1X2 = maxX2 - 1;
-                lMin1X3 = 1;
-                lMax1X3 = 3;
-
-                lMin2X1 = maxX1 - 3;
-                lMax2X1 = maxX1 - 1;
-                lMin2X2 = maxX2 - 3;
-                lMax2X2 = maxX2 - 2;
-                lMin2X3 = 1;
-                lMax2X3 = 3;
-
-                lMin3X1 = maxX1 - 3;
-                lMax3X1 = maxX1 - 1;
-                lMin3X2 = maxX2 - 3;
-                lMax3X2 = maxX2 - 1;
-                lMin3X3 = 3;
-                lMax3X3 = 3;
-            } else if (sendDir == BNW) {
-                lMin1X1 = 3;
-                lMax1X1 = 3;
-                lMin1X2 = maxX2 - 3;
-                lMax1X2 = maxX2 - 1;
-                lMin1X3 = 1;
-                lMax1X3 = 3;
-
-                lMin2X1 = 1;
-                lMax2X1 = 3;
-                lMin2X2 = maxX2 - 3;
-                lMax2X2 = maxX2 - 2;
-                lMin2X3 = 1;
-                lMax2X3 = 3;
-
-                lMin3X1 = 1;
-                lMax3X1 = 3;
-                lMin3X2 = maxX2 - 3;
-                lMax3X2 = maxX2 - 1;
-                lMin3X3 = 3;
-                lMax3X3 = 3;
-            } else if (sendDir == BSE) {
-                lMin1X1 = maxX1 - 3;
-                lMax1X1 = maxX1 - 2;
-                lMin1X2 = 1;
-                lMax1X2 = 3;
-                lMin1X3 = 1;
-                lMax1X3 = 3;
-
-                lMin2X1 = maxX1 - 3;
-                lMax2X1 = maxX1 - 1;
-                lMin2X2 = 3;
-                lMax2X2 = 3;
-                lMin2X3 = 1;
-                lMax2X3 = 3;
-
-                lMin3X1 = maxX1 - 3;
-                lMax3X1 = maxX1 - 1;
-                lMin3X2 = 1;
-                lMax3X2 = 3;
-                lMin3X3 = 3;
-                lMax3X3 = 3;
-            } else if (sendDir == BSW) {
-                lMin1X1 = 3;
-                lMax1X1 = 3;
-                lMin1X2 = 1;
-                lMax1X2 = 3;
-                lMin1X3 = 1;
-                lMax1X3 = 3;
-
-                lMin2X1 = 1;
-                lMax2X1 = 3;
-                lMin2X2 = 3;
-                lMax2X2 = 3;
-                lMin2X3 = 1;
-                lMax2X3 = 3;
-
-                lMin3X1 = 1;
-                lMax3X1 = 3;
-                lMin3X2 = 1;
-                lMax3X2 = 3;
-                lMin3X3 = 3;
-                lMax3X3 = 3;
-            }
-            if (receiver00) {
-                findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetReceiver00);
-            }
-            if (receiver00) {
-                findFCCells(lMin2X1, lMin2X2, lMin2X3, lMax2X1, lMax2X2, lMax2X3, iNodeSetReceiver00);
-            }
-            if (receiver00) {
-                findFCCells(lMin3X1, lMin3X2, lMin3X3, lMax3X1, lMax3X2, lMax3X3, iNodeSetReceiver00);
-            }
-            break;
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-// template< typename VectorTransmitter >
-void CoarseToFineNodeSetBlock3DConnector::distributeReceiveVectors()
-{
-    using namespace D3Q27System;
-
-    SPtr<DistributionArray3D> fTo = block.lock()->getKernel()->getDataSet()->getFdistributions();
-
-    int index00 = 0;
-    int index01 = 0;
-    int index10 = 0;
-    int index11 = 0;
-
-    vector_type &data00 = this->receiver00->getData();
-    vector_type &data01 = this->receiver01->getData();
-    vector_type &data10 = this->receiver10->getData();
-    vector_type &data11 = this->receiver11->getData();
-
-    for (INodeVector inode : iNodeSetReceiver00) {
-        LBMReal icellC[27];
-        this->readICellCfromData(data00, index00, icellC);
-        iprocessor->writeINodeInv(fTo, icellC, inode[0], inode[1], inode[2]);
-    }
-    for (INodeVector inode : iNodeSetReceiver01) {
-        LBMReal icellC[27];
-        this->readICellCfromData(data01, index01, icellC);
-        iprocessor->writeINodeInv(fTo, icellC, inode[0], inode[1], inode[2]);
-    }
-    for (INodeVector inode : iNodeSetReceiver10) {
-        LBMReal icellC[27];
-        this->readICellCfromData(data10, index10, icellC);
-        iprocessor->writeINodeInv(fTo, icellC, inode[0], inode[1], inode[2]);
-    }
-    for (INodeVector inode : iNodeSetReceiver11) {
-        LBMReal icellC[27];
-        this->readICellCfromData(data11, index11, icellC);
-        iprocessor->writeINodeInv(fTo, icellC, inode[0], inode[1], inode[2]);
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineNodeSetBlock3DConnector::readICellCfromData(vector_type &data, int &index, LBMReal *icellC)
-{
-    for (int i = D3Q27System::STARTF; i < D3Q27System::ENDF + 1; i++) {
-        icellC[i] = data[index++];
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-void CoarseToFineNodeSetBlock3DConnector::getLocalMinMax(int &minX1, int &minX2, int &minX3, int &maxX1, int &maxX2,
-                                                         int &maxX3)
-{
-    using namespace D3Q27System;
-    int TminX1 = minX1;
-    int TminX2 = minX2;
-    int TminX3 = minX3;
-    int TmaxX1 = maxX1;
-    int TmaxX2 = maxX2;
-    int TmaxX3 = maxX3;
-
-    if (block.lock()->hasInterpolationFlagCF(E)) {
-        if (maxX1 == TmaxX1)
-            maxX1 -= 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(W)) {
-        if (minX1 == TminX1)
-            minX1 += 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(N)) {
-        if (maxX2 == TmaxX2)
-            maxX2 -= 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(S)) {
-        if (minX2 == TminX2)
-            minX2 += 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(T)) {
-        if (maxX3 == TmaxX3)
-            maxX3 -= 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(B)) {
-        if (minX3 == TminX3)
-            minX3 += 2;
-    }
-
-    // E-W-N-S
-    if (block.lock()->hasInterpolationFlagCF(NE) && !block.lock()->hasInterpolationFlagCF(N) &&
-        !block.lock()->hasInterpolationFlagCF(E)) {
-        if (maxX1 == TmaxX1)
-            maxX1 -= 2;
-        if (maxX2 == TmaxX2)
-            maxX2 -= 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(SW) && !block.lock()->hasInterpolationFlagCF(W) &&
-        !block.lock()->hasInterpolationFlagCF(S)) {
-        if (minX1 == TminX1)
-            minX1 += 2;
-        if (minX2 == TminX2)
-            minX2 += 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(SE) && !block.lock()->hasInterpolationFlagCF(E) &&
-        !block.lock()->hasInterpolationFlagCF(S)) {
-        if (maxX1 == TmaxX1)
-            maxX1 -= 2;
-        if (minX2 == TminX2)
-            minX2 += 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(NW) && !block.lock()->hasInterpolationFlagCF(N) &&
-        !block.lock()->hasInterpolationFlagCF(W)) {
-        if (minX1 == TminX1)
-            minX1 += 2;
-        if (maxX2 == TmaxX2)
-            maxX2 -= 2;
-    }
-
-    //	////T-B-E-W
-    if (block.lock()->hasInterpolationFlagCF(TE) && !block.lock()->hasInterpolationFlagCF(E) &&
-        !block.lock()->hasInterpolationFlagCF(T)) {
-        if (maxX1 == TmaxX1)
-            maxX1 -= 2;
-        if (maxX3 == TmaxX3)
-            maxX3 -= 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(BW) && !block.lock()->hasInterpolationFlagCF(W) &&
-        !block.lock()->hasInterpolationFlagCF(B)) {
-        if (minX1 == TminX1)
-            minX1 += 2;
-        if (minX3 == TminX3)
-            minX3 += 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(BE) && !block.lock()->hasInterpolationFlagCF(E) &&
-        !block.lock()->hasInterpolationFlagCF(B)) {
-        if (maxX1 == TmaxX1)
-            maxX1 -= 2;
-        if (minX3 == TminX3)
-            minX3 += 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(TW) && !block.lock()->hasInterpolationFlagCF(W) &&
-        !block.lock()->hasInterpolationFlagCF(T)) {
-        if (minX1 == TminX1)
-            minX1 += 2;
-        if (maxX3 == TmaxX3)
-            maxX3 -= 2;
-    }
-
-    ////T-B-N-S
-    if (block.lock()->hasInterpolationFlagCF(TN) && !block.lock()->hasInterpolationFlagCF(N) &&
-        !block.lock()->hasInterpolationFlagCF(T)) {
-        if (maxX2 == TmaxX2)
-            maxX2 -= 2;
-        if (maxX3 == TmaxX3)
-            maxX3 -= 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(BS) && !block.lock()->hasInterpolationFlagCF(S) &&
-        !block.lock()->hasInterpolationFlagCF(B)) {
-        if (minX2 == TminX2)
-            minX2 += 2;
-        if (minX3 == TminX3)
-            minX3 += 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(BN) && !block.lock()->hasInterpolationFlagCF(N) &&
-        !block.lock()->hasInterpolationFlagCF(B)) {
-        if (maxX2 == TmaxX2)
-            maxX2 -= 2;
-        if (minX3 == TminX3)
-            minX3 += 2;
-    }
-    if (block.lock()->hasInterpolationFlagCF(TS) && !block.lock()->hasInterpolationFlagCF(S) &&
-        !block.lock()->hasInterpolationFlagCF(T)) {
-        if (minX2 == TminX2)
-            minX2 += 2;
-        if (maxX3 == TmaxX3)
-            maxX3 -= 2;
-    }
-}
diff --git a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineNodeSetBlock3DConnector.h b/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineNodeSetBlock3DConnector.h
deleted file mode 100644
index 4e71916d4a489a7d834c360c21caafa5bb42526d..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineNodeSetBlock3DConnector.h
+++ /dev/null
@@ -1,98 +0,0 @@
-//! \file CoarseToFineNodeSetBlock3DConnector.h
-//! \class CoarseToFineNodeSetBlock3DConnector
-//! \brief Connector interpolates and sends data from coarse level to fine.
-//! \author Konstantin Kutscher
-//! \date 18.05.2015
-
-#ifndef CoarseToFineNodeSetBlock3DConnector_H
-#define CoarseToFineNodeSetBlock3DConnector_H
-
-#include <set>
-#include <vector>
-
-//#include "basics/transmitter/TbTransmitter.h"
-//#include "basics/transmitter/TbTransmitterLocal.h"
-//#include "basics/container/CbVector.h"
-#include "BCProcessor.h"
-#include "Block3D.h"
-#include "CoarseToFineBlock3DConnector.h"
-#include "D3Q27System.h"
-#include "Grid3D.h"
-#include "InterpolationProcessor.h"
-#include "LBMKernel.h"
-#include "MathUtil.hpp"
-#include <PointerDefinitions.h>
-
-class Block3D;
-
-// daten werden in einen vector (dieser befindet sich im transmitter) kopiert
-// der vector wird via transmitter uebertragen
-// transmitter kann ein lokal, MPI, RCG, CTL oder was auch immer fuer ein
-// transmitter sein, der von Transmitter abgeleitet ist ;-)
-
-// send direction:    E<->W     N<->S    T<->B
-//  ---------          x3       x3        x2
-// | 01 | 11 |         ^        ^         ^
-// |----+----|         +-> x2   +->x1     +->x1
-// | 00 | 10 |
-//  ---------
-
-class CoarseToFineNodeSetBlock3DConnector : public CoarseToFineBlock3DConnector
-{
-public:
-    CoarseToFineNodeSetBlock3DConnector(SPtr<Block3D> block, VectorTransmitterPtr sender00,
-                                        VectorTransmitterPtr receiver00, VectorTransmitterPtr sender01,
-                                        VectorTransmitterPtr receiver01, VectorTransmitterPtr sender10,
-                                        VectorTransmitterPtr receiver10, VectorTransmitterPtr sender11,
-                                        VectorTransmitterPtr receiver11, int sendDir,
-                                        InterpolationProcessorPtr iprocessor);
-
-    void init() override;
-
-    void fillSendVectors() override;
-    void distributeReceiveVectors() override;
-
-protected:
-    typedef std::vector<int> INodeVector;
-    using INodeSet = std::vector<INodeVector>;
-    INodeSet iNodeSetSender00;
-    INodeSet iNodeSetSender01;
-    INodeSet iNodeSetSender10;
-    INodeSet iNodeSetSender11;
-    INodeSet iNodeSetReceiver00;
-    INodeSet iNodeSetReceiver01;
-    INodeSet iNodeSetReceiver10;
-    INodeSet iNodeSetReceiver11;
-
-    void writeICellFtoData(vector_type &data, int &index, D3Q27ICell &icellF);
-    void writeNodeToVector(vector_type &data, int &index, LBMReal *inode);
-    void readICellCfromData(vector_type &data, int &index, LBMReal *icellC);
-
-    void findCFCells();
-    void findCFCells(int lMinX1, int lMinX2, int lMinX3, int lMaxX1, int lMaxX2, int lMaxX3, INodeSet &inodes);
-
-    void findFCCells();
-    void findFCCells(int lMinX1, int lMinX2, int lMinX3, int lMaxX1, int lMaxX2, int lMaxX3, INodeSet &inodes);
-
-    void getLocalMinMax(int &minX1, int &minX2, int &minX3, int &maxX1, int &maxX2, int &maxX3);
-
-    int bMaxX1, bMaxX2, bMaxX3;
-
-    int minX1;
-    int minX2;
-    int minX3;
-
-    int maxX1;
-    int maxX2;
-    int maxX3;
-
-    int minHalfX1;
-    int minHalfX2;
-    int minHalfX3;
-
-    int maxHalfX1;
-    int maxHalfX2;
-    int maxHalfX3;
-};
-
-#endif
diff --git a/src/cpu/VirtualFluidsCore/Connectors/ConnectorFactory.h b/src/cpu/VirtualFluidsCore/Connectors/ConnectorFactory.h
deleted file mode 100644
index 3e8828639bebfabbacf62793de954afd17b86026..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/ConnectorFactory.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef ConnectorFactory_h__
-#define ConnectorFactory_h__
-
-#include "Block3DConnector.h"
-#include "FineToCoarseBlock3DConnector.h"
-#include "InterpolationProcessor.h"
-#include "TransmitterType.h"
-
-#include <PointerDefinitions.h>
-
-class ConnectorFactory
-{
-public:
-    ConnectorFactory() = default;
-    
-    virtual ~ConnectorFactory() = default;
-    
-
-    virtual SPtr<Block3DConnector> createSameLevelDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to,
-                                                                  int sendDir)                                = 0;
-    virtual SPtr<Block3DConnector> createSameLevelVectorConnector(SPtr<Block3D> block, VectorTransmitterPtr sender,
-                                                                  VectorTransmitterPtr receiver, int sendDir) = 0;
-    virtual SPtr<Block3DConnector>
-    createCoarseToFineConnector(SPtr<Block3D> block, VectorTransmitterPtr sender00, VectorTransmitterPtr receiver00,
-                                VectorTransmitterPtr sender01, VectorTransmitterPtr receiver01,
-                                VectorTransmitterPtr sender10, VectorTransmitterPtr receiver10,
-                                VectorTransmitterPtr sender11, VectorTransmitterPtr receiver11, int sendDir,
-                                InterpolationProcessorPtr iprocessor) = 0;
-    virtual SPtr<Block3DConnector>
-    createFineToCoarseConnector(SPtr<Block3D> block, VectorTransmitterPtr sender, VectorTransmitterPtr receiver,
-                                int sendDir, InterpolationProcessorPtr iprocessor,
-                                FineToCoarseBlock3DConnector::CFconnectorType connType) = 0;
-
-protected:
-private:
-};
-#endif // ConnectorFactory_h__
diff --git a/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETOffConnectorFactory.cpp b/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETOffConnectorFactory.cpp
deleted file mode 100644
index fdeb0e5569c49e82b4f7c7bbafb07a41ab07aecd..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETOffConnectorFactory.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-//#include "D3Q27ETOffConnectorFactory.h"
-//#include "TransmitterType.h"
-//#include "D3Q27ETCFOffVectorConnector.h"
-//#include "D3Q27ETFCOffVectorConnector.h"
-//#include "D3Q27ETFCVectorConnector.h"
-//#include "FineToCoarseBlock3DConnector.h"
-//
-// D3Q27ETOffConnectorFactory::D3Q27ETOffConnectorFactory()
-//{
-//}
-////////////////////////////////////////////////////////////////////////////
-// D3Q27ETOffConnectorFactory::~D3Q27ETOffConnectorFactory()
-//{
-//}
-////////////////////////////////////////////////////////////////////////////
-// SPtr<Block3DConnector> D3Q27ETOffConnectorFactory::createCoarseToFineConnector(SPtr<Block3D> block,
-//   VectorTransmitterPtr sender00, VectorTransmitterPtr receiver00,
-//   VectorTransmitterPtr sender01, VectorTransmitterPtr receiver01,
-//   VectorTransmitterPtr sender10, VectorTransmitterPtr receiver10,
-//   VectorTransmitterPtr sender11, VectorTransmitterPtr receiver11,
-//   int sendDir, D3Q27InterpolationProcessorPtr iprocessor)
-//{
-//   return SPtr<Block3DConnector>(new D3Q27ETCFOffVectorConnector<VectorTransmitter>(block,
-//      sender00, receiver00, sender01, receiver01,
-//      sender10, receiver10, sender11, receiver11,
-//      sendDir, iprocessor));
-//}
-////////////////////////////////////////////////////////////////////////////
-// SPtr<Block3DConnector> D3Q27ETOffConnectorFactory::createFineToCoarseConnector(SPtr<Block3D> block,
-//   VectorTransmitterPtr sender,
-//   VectorTransmitterPtr receiver,
-//   int sendDir,
-//   D3Q27InterpolationProcessorPtr iprocessor,
-//   FineToCoarseBlock3DConnector::CFconnectorType connType)
-//{
-//   return  SPtr<Block3DConnector>(new D3Q27ETFCOffVectorConnector<VectorTransmitter>(block,
-//      sender, receiver, sendDir, iprocessor, connType));
-//}
diff --git a/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETOffConnectorFactory.h b/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETOffConnectorFactory.h
deleted file mode 100644
index 8ed08c80aa56ff71db5c6fff2b9bfeaeca962646..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETOffConnectorFactory.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//#ifndef D3Q27ETOffConnectorFactory_h__
-//#define D3Q27ETOffConnectorFactory_h__
-//
-//#include "Block3DConnectorFactory.h"
-//
-//#include <PointerDefinitions.h>
-// class D3Q27ETOffConnectorFactory;
-// typedef SPtr<D3Q27ETOffConnectorFactory> D3Q27ETOffSPtr<ConnectorFactory>;
-//
-// class D3Q27ETOffConnectorFactory : public Block3DConnectorFactory
-//{
-// public:
-//   D3Q27ETOffConnectorFactory();
-//   virtual ~D3Q27ETOffConnectorFactory();
-//
-//   virtual SPtr<Block3DConnector> createCoarseToFineConnector(SPtr<Block3D> block,
-//      VectorTransmitterPtr sender00, VectorTransmitterPtr receiver00,
-//      VectorTransmitterPtr sender01, VectorTransmitterPtr receiver01,
-//      VectorTransmitterPtr sender10, VectorTransmitterPtr receiver10,
-//      VectorTransmitterPtr sender11, VectorTransmitterPtr receiver11,
-//      int sendDir, D3Q27InterpolationProcessorPtr iprocessor);
-//
-//   virtual SPtr<Block3DConnector> createFineToCoarseConnector(SPtr<Block3D> block,
-//      VectorTransmitterPtr sender,
-//      VectorTransmitterPtr receiver,
-//      int sendDir,
-//      D3Q27InterpolationProcessorPtr iprocessor,
-//      FineToCoarseBlock3DConnector::CFconnectorType connType);
-//
-// private:
-//
-//};
-//#endif // D3Q27ETOffConnectorFactory_h__
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseBlock3DConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseBlock3DConnector.cpp
deleted file mode 100644
index ca6d017a59e4c322ab70f42deaa4575cba97a2db..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseBlock3DConnector.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-#include "FineToCoarseBlock3DConnector.h"
-
-////////////////////////////////////////////////////////////////////////////
-FineToCoarseBlock3DConnector::FineToCoarseBlock3DConnector(SPtr<Block3D> block, VectorTransmitterPtr sender,
-                                                           VectorTransmitterPtr receiver, int sendDir,
-                                                           InterpolationProcessorPtr iprocessor,
-                                                           CFconnectorType connType)
-    : Block3DConnector(sendDir), block(block), sender(sender), receiver(receiver), iprocessor(iprocessor),
-      connType(connType)
-{
-    if (!(sendDir == D3Q27System::E || sendDir == D3Q27System::W || sendDir == D3Q27System::N ||
-          sendDir == D3Q27System::S || sendDir == D3Q27System::T || sendDir == D3Q27System::B ||
-          sendDir == D3Q27System::NE || sendDir == D3Q27System::SW || sendDir == D3Q27System::SE ||
-          sendDir == D3Q27System::NW || sendDir == D3Q27System::TE || sendDir == D3Q27System::BW ||
-          sendDir == D3Q27System::BE || sendDir == D3Q27System::TW || sendDir == D3Q27System::TN ||
-          sendDir == D3Q27System::BS || sendDir == D3Q27System::BN || sendDir == D3Q27System::TS
-
-          || sendDir == D3Q27System::TNE || sendDir == D3Q27System::TNW || sendDir == D3Q27System::TSE ||
-          sendDir == D3Q27System::TSW || sendDir == D3Q27System::BNE || sendDir == D3Q27System::BNW ||
-          sendDir == D3Q27System::BSE || sendDir == D3Q27System::BSW
-
-          )) {
-        throw UbException(UB_EXARGS, "invalid constructor for this direction");
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-bool FineToCoarseBlock3DConnector::isLocalConnector() { return !this->isRemoteConnector(); }
-//////////////////////////////////////////////////////////////////////////
-bool FineToCoarseBlock3DConnector::isRemoteConnector()
-{
-    return sender->isRemoteTransmitter() || receiver->isRemoteTransmitter();
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseBlock3DConnector::sendTransmitterDataSize()
-{
-    if (sender) {
-        UBLOG(logDEBUG5, "FineToCoarseBlock3DConnector<VectorTransmitter>::sendTransmitterDataSize()"
-                             << block.lock()->toString() + "sendDir=" << sendDir);
-        sender->sendDataSize();
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseBlock3DConnector::receiveTransmitterDataSize()
-{
-    if (receiver) {
-        UBLOG(logDEBUG5, "FineToCoarseBlock3DConnector<VectorTransmitter>::receiveTransmitterDataSize()"
-                             << block.lock()->toString() << "sendDir=" << sendDir);
-        receiver->receiveDataSize();
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseBlock3DConnector::prepareForSend()
-{
-    if (sender)
-        sender->prepareForSend();
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseBlock3DConnector::sendVectors()
-{
-    if (sender)
-        sender->sendData();
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseBlock3DConnector::prepareForReceive()
-{
-    if (receiver)
-        receiver->prepareForReceive();
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseBlock3DConnector::receiveVectors()
-{
-    if (receiver)
-        receiver->receiveData();
-}
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseBlock3DConnector.h b/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseBlock3DConnector.h
deleted file mode 100644
index 5e988887c427f34ddbae70f1c8fd16b1de75367c..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseBlock3DConnector.h
+++ /dev/null
@@ -1,93 +0,0 @@
-//! \file FineToCoarseBlock3DConnector.h
-//! \brief Base class for connectors that interpolates and sends data from fine level to coarse.
-//! \author Konstantin Kutscher
-//! \date 21.05.2015
-
-#ifndef FineToCoarseBlock3DConnector_H
-#define FineToCoarseBlock3DConnector_H
-
-#include "Block3D.h"
-#include "Block3DConnector.h"
-#include "D3Q27System.h"
-#include "InterpolationProcessor.h"
-#include "LBMKernel.h"
-#include "TransmitterType.h"
-
-#include <PointerDefinitions.h>
-
-class Block3D;
-
-//! \class FineToCoarseBlock3DConnector
-//! \brief Base class for connectors that interpolates and sends data from fine level to coarse.
-//! \details The data is copied in a vector (this is located in the transmitter).
-//! The vector is transmitted via transmitter.
-//! The transmitter can be a local, MPI, RCG, CTL or whatever
-//! which a transmitter that is derived from transmitter base class.
-//!
-//! four fine blocks inside a coarse block:
-//!
-//! |    |    |
-//! |:--:|:---|
-//! | 01 | 11 |
-//! | 00 | 10 |
-//!
-//! send direction:
-//!
-//! |E<->W   |  N<->S  |  T<->B |
-//! |--------|---------|--------|
-//! |  x3    |   x3    |    x2  |
-//! |  ^     |   ^     |    ^   |
-//! |  +->x2 |  +->x1  |   +->x1|
-
-class FineToCoarseBlock3DConnector : public Block3DConnector
-{
-public:
-    enum CFconnectorType { Type00, Type10, Type01, Type11 };
-
-public:
-    FineToCoarseBlock3DConnector(SPtr<Block3D> block, VectorTransmitterPtr sender, VectorTransmitterPtr receiver,
-                                 int sendDir, InterpolationProcessorPtr iprocessor, CFconnectorType connType);
-
-    bool isLocalConnector() override;
-    bool isRemoteConnector() override;
-
-    void sendTransmitterDataSize() override;
-    void receiveTransmitterDataSize() override;
-
-    void prepareForSend() override;
-    void sendVectors() override;
-
-    void prepareForReceive() override;
-    void receiveVectors() override;
-
-    void init() override                     = 0;
-    void fillSendVectors() override          = 0;
-    void distributeReceiveVectors() override = 0;
-
-    bool isInterpolationConnectorCF() override { return false; }
-    bool isInterpolationConnectorFC() override { return true; }
-
-    void prepareForSendX1() override {}
-    void prepareForSendX2() override {}
-    void prepareForSendX3() override {}
-
-    void sendVectorsX1() override {}
-    void sendVectorsX2() override {}
-    void sendVectorsX3() override {}
-
-    void prepareForReceiveX1() override {}
-    void prepareForReceiveX2() override {}
-    void prepareForReceiveX3() override {}
-
-    void receiveVectorsX1() override {}
-    void receiveVectorsX2() override {}
-    void receiveVectorsX3() override {}
-
-protected:
-    WPtr<Block3D> block;
-    VectorTransmitterPtr sender, receiver;
-    InterpolationProcessorPtr iprocessor;
-    CFconnectorType connType;
-};
-
-#endif
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseNodeSetBlock3DConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseNodeSetBlock3DConnector.cpp
deleted file mode 100644
index d40c5276c7c2e1ac6ede9233cf46c27f4331a24f..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseNodeSetBlock3DConnector.cpp
+++ /dev/null
@@ -1,1121 +0,0 @@
-#include "FineToCoarseNodeSetBlock3DConnector.h"
-#include "BCProcessor.h"
-#include "DataSet3D.h"
-
-//////////////////////////////////////////////////////////////////////////
-FineToCoarseNodeSetBlock3DConnector::FineToCoarseNodeSetBlock3DConnector(SPtr<Block3D> block,
-                                                                         VectorTransmitterPtr sender,
-                                                                         VectorTransmitterPtr receiver, int sendDir,
-                                                                         InterpolationProcessorPtr iprocessor,
-                                                                         CFconnectorType connType)
-    : FineToCoarseBlock3DConnector(block, sender, receiver, sendDir, iprocessor, connType)
-{
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseNodeSetBlock3DConnector::init()
-{
-    bMaxX1 = (int)FineToCoarseBlock3DConnector::block.lock()->getKernel()->getDataSet()->getFdistributions()->getNX1();
-    bMaxX2 = (int)FineToCoarseBlock3DConnector::block.lock()->getKernel()->getDataSet()->getFdistributions()->getNX2();
-    bMaxX3 = (int)FineToCoarseBlock3DConnector::block.lock()->getKernel()->getDataSet()->getFdistributions()->getNX3();
-
-    minX1 = 0;
-    minX2 = 0;
-    minX3 = 0;
-    maxX1 = bMaxX1 - 1;
-    maxX2 = bMaxX2 - 1;
-    maxX3 = bMaxX3 - 1;
-
-    minOffX1 = 0;
-    minOffX2 = 0;
-    minOffX3 = 0;
-
-    maxOffX1 = 0;
-    maxOffX2 = 0;
-    maxOffX3 = 0;
-
-    if (Utilities::isEven(bMaxX1)) {
-        minOffX1 = 0;
-        maxOffX1 = 0;
-    } else if (Utilities::isOdd(bMaxX1)) {
-        minOffX1 = 1;
-        maxOffX1 = -1;
-    }
-
-    if (Utilities::isEven(bMaxX2)) {
-        minOffX2 = 0;
-        maxOffX2 = 0;
-    } else if (Utilities::isOdd(bMaxX2)) {
-        minOffX2 = 1;
-        maxOffX2 = -1;
-    }
-
-    if (Utilities::isEven(bMaxX3)) {
-        minOffX3 = 0;
-        maxOffX3 = 0;
-    } else if (Utilities::isOdd(bMaxX3)) {
-        minOffX3 = 1;
-        maxOffX3 = -1;
-    }
-
-    // int       sendSize = 0;
-    LBMReal initValue = -999.0;
-
-    int sendDataPerNode = 27 /*f*/;
-    int iCellSize       = 1; // size of interpolation cell
-
-    findFCCells();
-    findCFCells();
-
-    //////////////////////////////////////////////////////
-    // Debug
-    //////////////////////////////////////////////////////
-    //   if (FineToCoarseBlock3DConnector::block.lock()->getGlobalID() == 2183)
-    //   {
-    //      int test = 0;
-    //   }
-
-    if (FineToCoarseBlock3DConnector::sender)
-        FineToCoarseBlock3DConnector::sender->getData().resize(iNodeSetSender.size() * iCellSize * sendDataPerNode,
-                                                               initValue);
-    else
-        FineToCoarseBlock3DConnector::sender = VectorTransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-
-    if (!FineToCoarseBlock3DConnector::receiver)
-        FineToCoarseBlock3DConnector::receiver = VectorTransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseNodeSetBlock3DConnector::findFCCells(int lMinX1, int lMinX2, int lMinX3, int lMaxX1, int lMaxX2,
-                                                      int lMaxX3, INodeSet &inodes)
-{
-    //////////////////////////////////////////////////////
-    // Debug
-    //////////////////////////////////////////////////////
-    //   if (FineToCoarseBlock3DConnector::block.lock()->getGlobalID() == 2183)
-    //   {
-    //      int test = 0;
-    //   }
-
-    int ix1, ix2, ix3;
-    LBMReal x1off, x2off, x3off;
-
-    SPtr<DistributionArray3D> fFrom =
-        FineToCoarseBlock3DConnector::block.lock()->getKernel()->getDataSet()->getFdistributions();
-    SPtr<BCArray3D> bcArray = FineToCoarseBlock3DConnector::block.lock()->getKernel()->getBCProcessor()->getBCArray();
-
-    for (ix3 = lMinX3; ix3 <= lMaxX3; ix3 += 2) {
-        for (ix2 = lMinX2; ix2 <= lMaxX2; ix2 += 2) {
-            for (ix1 = lMinX1; ix1 <= lMaxX1; ix1 += 2) {
-                D3Q27ICell icellC;
-
-                int howManySolids =
-                    FineToCoarseBlock3DConnector::iprocessor->iCellHowManySolids(bcArray, ix1, ix2, ix3);
-
-                if (howManySolids == 0 || howManySolids == 8) {
-                    x1off = 0.0;
-                    x2off = 0.0;
-                    x3off = 0.0;
-                } else {
-                    if (!iprocessor->findNeighborICell(bcArray, fFrom, icellC, bMaxX1, bMaxX2, bMaxX3, ix1, ix2, ix3,
-                                                       x1off, x2off, x3off)) {
-                        std::string err = "For " + FineToCoarseBlock3DConnector::block.lock()->toString() +
-                                          " x1=" + UbSystem::toString(ix1) + ", x2=" + UbSystem::toString(ix2) +
-                                          ", x3=" + UbSystem::toString(ix3) +
-                                          " interpolation is not implemented for other direction" +
-                                          " by using in: " + (std::string) typeid(*this).name() +
-                                          " or maybe you have a solid on the block boundary";
-                        UB_THROW(UbException(UB_EXARGS, err));
-                    }
-                }
-
-                INodeVector inv;
-                inv.push_back(ix1 + (int)x1off);
-                inv.push_back(ix2 + (int)x2off);
-                inv.push_back(ix3 + (int)x3off);
-                inv.push_back((int)x1off);
-                inv.push_back((int)x2off);
-                inv.push_back((int)x3off);
-                // inodes.insert(inv);
-                inodes.push_back(inv);
-            }
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-void FineToCoarseNodeSetBlock3DConnector::findFCCells()
-{
-    using namespace D3Q27System;
-
-    int lMin1X1 = 0, lMin1X2 = 0, lMin1X3 = 0, lMax1X1 = 0, lMax1X2 = 0, lMax1X3 = 0;
-    int lMin2X1 = 0, lMin2X2 = 0, lMin2X3 = 0, lMax2X1 = 0, lMax2X2 = 0, lMax2X3 = 0;
-    int lMin3X1 = 0, lMin3X2 = 0, lMin3X3 = 0, lMax3X1 = 0, lMax3X2 = 0, lMax3X3 = 0;
-
-    // lMin1X1 = minX1+1; lMin1X2 = minX2+1; lMin1X3 = minX3+1;
-    // lMax1X1 = maxX1-1; lMax1X2 = maxX2-1; lMax1X3 = maxX3-1;
-    // getLocalMinMax(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3);
-
-    // lMin2X1 = minX1+1; lMin2X2 = minX2+1; lMin2X3 = minX3+1;
-    // lMax2X1 = maxX1-1; lMax2X2 = maxX2-1; lMax2X3 = maxX3-1;
-    // getLocalMinMax(lMin2X1, lMin2X2, lMin2X3, lMax2X1, lMax2X2, lMax2X3);
-
-    // lMin3X1 = minX1+1; lMin3X2 = minX2+1; lMin3X3 = minX3+1;
-    // lMax3X1 = maxX1-1; lMax3X2 = maxX2-1; lMax3X3 = maxX3-1;
-    // getLocalMinMax(lMin3X1, lMin3X2, lMin3X3, lMax3X1, lMax3X2, lMax3X3);
-
-    switch (sendDir) {
-            // faces
-        case E:
-        case W:
-            if (sendDir == E) {
-                lMin1X1 = maxX1 - 6;
-                lMax1X1 = lMin1X1;
-            } else if (sendDir == W) {
-                lMin1X1 = 5;
-                lMax1X1 = lMin1X1;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMin1X2 = minX2;
-                lMax1X2 = maxX2 + maxOffX2 - 1;
-                lMin1X3 = minX3;
-                lMax1X3 = maxX3 + maxOffX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMin1X2 = minX2 + minOffX2;
-                lMax1X2 = maxX2 - 1;
-                lMin1X3 = minX3;
-                lMax1X3 = maxX3 + maxOffX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type01) {
-                lMin1X2 = minX2;
-                lMax1X2 = maxX2 + maxOffX2 - 1;
-                lMin1X3 = minX3 + minOffX3;
-                lMax1X3 = maxX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type11) {
-                lMin1X2 = minX2 + minOffX2;
-                lMax1X2 = maxX2 - 1;
-                lMin1X3 = minX3 + minOffX3;
-                lMax1X3 = maxX3 - 1;
-            }
-            findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetSender);
-            break;
-        case N:
-        case S:
-            if (sendDir == N) {
-                lMin1X2 = maxX2 - 6;
-                lMax1X2 = lMin1X2;
-            } else if (sendDir == S) {
-                lMin1X2 = 5;
-                lMax1X2 = lMin1X2;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMin1X1 = minX1;
-                lMax1X1 = maxX1 + maxOffX1 - 1;
-                lMin1X3 = minX3;
-                lMax1X3 = maxX3 + maxOffX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMin1X1 = minX1 + minOffX1;
-                lMax1X1 = maxX1 - 1;
-                lMin1X3 = minX3;
-                lMax1X3 = maxX3 + maxOffX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type01) {
-                lMin1X1 = minX1;
-                lMax1X1 = maxX1 + maxOffX1 - 1;
-                lMin1X3 = minX3 + minOffX3;
-                lMax1X3 = maxX3;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type11) {
-                lMin1X1 = minX1 + minOffX1;
-                lMax1X1 = maxX1 - 1;
-                lMin1X3 = minX3 + minOffX3;
-                lMax1X3 = maxX3 - 1;
-            }
-            findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetSender);
-            break;
-        case T:
-        case B:
-            if (sendDir == T) {
-                lMin1X3 = maxX3 - 6;
-                lMax1X3 = lMin1X3;
-            } else if (sendDir == B) {
-                lMin1X3 = 5;
-                lMax1X3 = lMin1X3;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMin1X1 = minX1;
-                lMax1X1 = maxX1 + maxOffX1 - 1;
-                lMin1X2 = minX2;
-                lMax1X2 = maxX2 + maxOffX2 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMin1X1 = minX1 + minOffX1;
-                lMax1X1 = maxX1 - 1;
-                lMin1X2 = minX2;
-                lMax1X2 = maxX2 + maxOffX2 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type01) {
-                lMin1X1 = minX1;
-                lMax1X1 = maxX1 + maxOffX1 - 1;
-                lMin1X2 = minX2 + minOffX2;
-                lMax1X2 = maxX2 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type11) {
-                lMin1X1 = minX1 + minOffX1;
-                lMax1X1 = maxX1 - 1;
-                lMin1X2 = minX2 + minOffX2;
-                lMax1X2 = maxX2 - 1;
-            }
-            findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetSender);
-            break;
-            // edges
-            // N-S-E-W
-        case NE:
-        case SW:
-        case SE:
-        case NW:
-            if (sendDir == NE) {
-                lMin1X1 = maxX1 - 6;
-                lMax1X1 = lMin1X1 + 4;
-                lMin1X2 = maxX2 - 6;
-                lMax1X2 = lMin1X2;
-
-                lMin2X1 = maxX1 - 6;
-                lMax2X1 = lMin2X1;
-                lMin2X2 = maxX2 - 6;
-                lMax2X2 = lMin2X2 + 4;
-            } else if (sendDir == SW) {
-                lMin1X1 = 1;
-                lMax1X1 = lMin1X1 + 4;
-                lMin1X2 = 5;
-                lMax1X2 = lMin1X2;
-
-                lMin2X1 = 5;
-                lMax2X1 = lMin2X1;
-                lMin2X2 = 1;
-                lMax2X2 = lMin2X2 + 4;
-            } else if (sendDir == SE) {
-                lMin1X1 = maxX1 - 6;
-                lMax1X1 = lMin1X1 + 4;
-                lMin1X2 = 5;
-                lMax1X2 = lMin1X2;
-
-                lMin2X1 = maxX1 - 6;
-                lMax2X1 = lMin2X1;
-                lMin2X2 = 1;
-                lMax2X2 = lMin2X2 + 4;
-            } else if (sendDir == NW) {
-                lMin1X1 = 1;
-                lMax1X1 = lMin1X1 + 4;
-                lMin1X2 = maxX2 - 6;
-                lMax1X2 = lMin1X2;
-
-                lMin2X1 = 5;
-                lMax2X1 = lMin2X1;
-                lMin2X2 = maxX2 - 6;
-                lMax2X2 = lMin2X2 + 4;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMin1X3 = minX3;
-                lMax1X3 = maxX3 + maxOffX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMin1X3 = minX3 + minOffX3;
-                lMax1X3 = maxX3 - 1;
-            }
-
-            findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetSender);
-            findFCCells(lMin2X1, lMin2X2, lMin1X3, lMax2X1, lMax2X2, lMax1X3, iNodeSetSender);
-
-            break;
-            // T-B-E-W
-        case TE:
-        case BW:
-        case BE:
-        case TW:
-            if (sendDir == TE) {
-                lMin1X1 = maxX1 - 6;
-                lMax1X1 = lMin1X1 + 4;
-                lMin1X3 = maxX3 - 6;
-                lMax1X3 = lMin1X3;
-
-                lMin2X1 = maxX1 - 6;
-                lMax2X1 = lMin2X1;
-                lMin2X3 = maxX3 - 6;
-                lMax2X3 = lMin2X3 + 4;
-            } else if (sendDir == BW) {
-                lMin1X1 = 1;
-                lMax1X1 = lMin1X1 + 4;
-                lMin1X3 = 5;
-                lMax1X3 = lMin1X3;
-
-                lMin2X1 = 5;
-                lMax2X1 = lMin2X1;
-                lMin2X3 = 1;
-                lMax2X3 = lMin2X3 + 4;
-            } else if (sendDir == BE) {
-                lMin1X1 = maxX1 - 6;
-                lMax1X1 = lMin1X1 + 4;
-                lMin1X3 = 5;
-                lMax1X3 = lMin1X3;
-
-                lMin2X1 = maxX1 - 6;
-                lMax2X1 = lMin2X1;
-                lMin2X3 = 1;
-                lMax2X3 = lMin2X3 + 4;
-            } else if (sendDir == TW) {
-                lMin1X1 = 1;
-                lMax1X1 = lMin1X1 + 5;
-                lMin1X3 = maxX3 - 6;
-                lMax1X3 = lMin1X3;
-
-                lMin2X1 = 5;
-                lMax2X1 = lMin2X1;
-                lMin2X3 = maxX3 - 6;
-                lMax2X3 = lMin2X3 + 4;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMin1X2 = minX2;
-                lMax1X2 = maxX2 + maxOffX2 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMin1X2 = minX2 + minOffX2;
-                lMax1X2 = maxX2 - 1;
-            }
-
-            findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetSender);
-            findFCCells(lMin2X1, lMin1X2, lMin2X3, lMax2X1, lMax1X2, lMax2X3, iNodeSetSender);
-            break;
-            // T-B-N-S
-        case TN:
-        case BS:
-        case BN:
-        case TS:
-            if (sendDir == TN) {
-                lMin1X2 = maxX2 - 6;
-                lMax1X2 = lMin1X2 + 4;
-                lMin1X3 = maxX3 - 6;
-                lMax1X3 = lMin1X3;
-
-                lMin2X2 = maxX2 - 6;
-                lMax2X2 = lMin2X2;
-                lMin2X3 = maxX3 - 6;
-                lMax2X3 = lMin2X3 + 4;
-            } else if (sendDir == BS) {
-                lMin1X2 = 1;
-                lMax1X2 = lMin1X2 + 4;
-                lMin1X3 = 5;
-                lMax1X3 = lMin1X3;
-
-                lMin2X2 = 5;
-                lMax2X2 = lMin2X2;
-                lMin2X3 = 1;
-                lMax2X3 = lMin2X3 + 4;
-            } else if (sendDir == BN) {
-                lMin1X2 = maxX2 - 6;
-                lMax1X2 = lMin1X2 + 4;
-                lMin1X3 = 5;
-                lMax1X3 = lMin1X3;
-
-                lMin2X2 = maxX2 - 6;
-                lMax2X2 = lMin2X2;
-                lMin2X3 = 1;
-                lMax2X3 = lMin2X3 + 4;
-            } else if (sendDir == TS) {
-                lMin1X2 = 1;
-                lMax1X2 = lMin1X2 + 4;
-                lMin1X3 = maxX3 - 6;
-                lMax1X3 = lMin1X3;
-
-                lMin2X2 = 5;
-                lMax2X2 = lMin2X2;
-                lMin2X3 = maxX3 - 6;
-                lMax2X3 = lMin2X3 + 4;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMin1X1 = minX1;
-                lMax1X1 = maxX1 + maxOffX1 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMin1X1 = minX1 + minOffX1;
-                lMax1X1 = maxX1 - 1;
-            }
-
-            findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetSender);
-            findFCCells(lMin1X1, lMin2X2, lMin2X3, lMax1X1, lMax2X2, lMax2X3, iNodeSetSender);
-            break;
-            // corners
-        case TNE:
-        case TNW:
-        case TSE:
-        case TSW:
-        case BNE:
-        case BNW:
-        case BSE:
-        case BSW:
-            if (sendDir == TNE) {
-                lMin1X1 = maxX1 - 6;
-                lMax1X1 = maxX1 - 6;
-                lMin1X2 = maxX2 - 6;
-                lMax1X2 = maxX2 - 2;
-                lMin1X3 = maxX3 - 6;
-                lMax1X3 = maxX3 - 2;
-
-                lMin2X1 = maxX1 - 6;
-                lMax2X1 = maxX1 - 2;
-                lMin2X2 = maxX2 - 6;
-                lMax2X2 = maxX2 - 6;
-                lMin2X3 = maxX3 - 6;
-                lMax2X3 = maxX3 - 1;
-
-                lMin3X1 = maxX1 - 6;
-                lMax3X1 = maxX1 - 2;
-                lMin3X2 = maxX2 - 6;
-                lMax3X2 = maxX2 - 2;
-                lMin3X3 = maxX3 - 6;
-                lMax3X3 = maxX3 - 5;
-            } else if (sendDir == TNW) {
-                lMin1X1 = 5;
-                lMax1X1 = 5;
-                lMin1X2 = maxX2 - 6;
-                lMax1X2 = maxX2 - 2;
-                lMin1X3 = maxX3 - 6;
-                lMax1X3 = maxX3 - 2;
-
-                lMin2X1 = 1;
-                lMax2X1 = 5;
-                lMin2X2 = maxX2 - 6;
-                lMax2X2 = maxX2 - 6;
-                lMin2X3 = maxX3 - 6;
-                lMax2X3 = maxX3 - 2;
-
-                lMin3X1 = 1;
-                lMax3X1 = 5;
-                lMin3X2 = maxX2 - 6;
-                lMax3X2 = maxX2 - 2;
-                lMin3X3 = maxX3 - 6;
-                lMax3X3 = maxX3 - 6;
-            } else if (sendDir == TSE) {
-                lMin1X1 = maxX1 - 6;
-                lMax1X1 = maxX1 - 6;
-                lMin1X2 = 1;
-                lMax1X2 = 5;
-                lMin1X3 = maxX3 - 6;
-                lMax1X3 = maxX3 - 2;
-
-                lMin2X1 = maxX1 - 6;
-                lMax2X1 = maxX1 - 2;
-                lMin2X2 = 5;
-                lMax2X2 = 5;
-                lMin2X3 = maxX3 - 6;
-                lMax2X3 = maxX3 - 2;
-
-                lMin3X1 = maxX1 - 6;
-                lMax3X1 = maxX1 - 2;
-                lMin3X2 = 1;
-                lMax3X2 = 5;
-                lMin3X3 = maxX3 - 6;
-                lMax3X3 = maxX3 - 6;
-            } else if (sendDir == TSW) {
-                lMin1X1 = 5;
-                lMax1X1 = 5;
-                lMin1X2 = 1;
-                lMax1X2 = 5;
-                lMin1X3 = maxX3 - 6;
-                lMax1X3 = maxX3 - 2;
-
-                lMin2X1 = 1;
-                lMax2X1 = 5;
-                lMin2X2 = 5;
-                lMax2X2 = 5;
-                lMin2X3 = maxX3 - 6;
-                lMax2X3 = maxX3 - 2;
-
-                lMin3X1 = 1;
-                lMax3X1 = 5;
-                lMin3X2 = 1;
-                lMax3X2 = 5;
-                lMin3X3 = maxX3 - 6;
-                lMax3X3 = maxX3 - 6;
-            } else if (sendDir == BNE) {
-                lMin1X1 = maxX1 - 6;
-                lMax1X1 = maxX1 - 6;
-                lMin1X2 = maxX2 - 6;
-                lMax1X2 = maxX2 - 2;
-                lMin1X3 = 1;
-                lMax1X3 = 5;
-
-                lMin2X1 = maxX1 - 6;
-                lMax2X1 = maxX1 - 2;
-                lMin2X2 = maxX2 - 6;
-                lMax2X2 = maxX2 - 6;
-                lMin2X3 = 1;
-                lMax2X3 = 5;
-
-                lMin3X1 = maxX1 - 6;
-                lMax3X1 = maxX1 - 2;
-                lMin3X2 = maxX2 - 6;
-                lMax3X2 = maxX2 - 2;
-                lMin3X3 = 5;
-                lMax3X3 = 5;
-            } else if (sendDir == BNW) {
-                lMin1X1 = 5;
-                lMax1X1 = 5;
-                lMin1X2 = maxX2 - 6;
-                lMax1X2 = maxX2 - 2;
-                lMin1X3 = 1;
-                lMax1X3 = 5;
-
-                lMin2X1 = 1;
-                lMax2X1 = 5;
-                lMin2X2 = maxX2 - 6;
-                lMax2X2 = maxX2 - 6;
-                lMin2X3 = 1;
-                lMax2X3 = 5;
-
-                lMin3X1 = 1;
-                lMax3X1 = 5;
-                lMin3X2 = maxX2 - 6;
-                lMax3X2 = maxX2 - 2;
-                lMin3X3 = 5;
-                lMax3X3 = 5;
-            } else if (sendDir == BSE) {
-                lMin1X1 = maxX1 - 6;
-                lMax1X1 = maxX1 - 6;
-                lMin1X2 = 1;
-                lMax1X2 = 5;
-                lMin1X3 = 1;
-                lMax1X3 = 5;
-
-                lMin2X1 = maxX1 - 6;
-                lMax2X1 = maxX1 - 2;
-                lMin2X2 = 5;
-                lMax2X2 = 5;
-                lMin2X3 = 1;
-                lMax2X3 = 5;
-
-                lMin3X1 = maxX1 - 5;
-                lMax3X1 = maxX1 - 2;
-                lMin3X2 = 1;
-                lMax3X2 = 5;
-                lMin3X3 = 5;
-                lMax3X3 = 5;
-            } else if (sendDir == BSW) {
-                lMin1X1 = 5;
-                lMax1X1 = 5;
-                lMin1X2 = 1;
-                lMax1X2 = 5;
-                lMin1X3 = 1;
-                lMax1X3 = 5;
-
-                lMin2X1 = 1;
-                lMax2X1 = 5;
-                lMin2X2 = 5;
-                lMax2X2 = 5;
-                lMin2X3 = 1;
-                lMax2X3 = 5;
-
-                lMin3X1 = 1;
-                lMax3X1 = 5;
-                lMin3X2 = 1;
-                lMax3X2 = 5;
-                lMin3X3 = 5;
-                lMax3X3 = 5;
-            }
-            findFCCells(lMin1X1, lMin1X2, lMin1X3, lMax1X1, lMax1X2, lMax1X3, iNodeSetSender);
-            findFCCells(lMin2X1, lMin2X2, lMin2X3, lMax2X1, lMax2X2, lMax2X3, iNodeSetSender);
-            findFCCells(lMin3X1, lMin3X2, lMin3X3, lMax3X1, lMax3X2, lMax3X3, iNodeSetSender);
-            break;
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseNodeSetBlock3DConnector::fillSendVectors()
-{
-    using namespace D3Q27System;
-
-    SPtr<DistributionArray3D> fFrom = block.lock()->getKernel()->getDataSet()->getFdistributions();
-
-    int index = 0;
-
-    vector_type &data = this->sender->getData();
-
-    for (INodeVector inode : iNodeSetSender) {
-        LBMReal icellC[27];
-        D3Q27ICell icellF;
-        iprocessor->readICell(fFrom, icellF, inode[0], inode[1], inode[2]);
-        iprocessor->interpolateFineToCoarse(icellF, icellC, inode[3], inode[4], inode[5]);
-        writeICellCtoData(data, index, icellC);
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseNodeSetBlock3DConnector::readICellFfromData(vector_type &data, int &index, D3Q27ICell &icellF)
-{
-    readNodeFromVector(data, index, icellF.BSW);
-    readNodeFromVector(data, index, icellF.BSE);
-    readNodeFromVector(data, index, icellF.BNW);
-    readNodeFromVector(data, index, icellF.BNE);
-    readNodeFromVector(data, index, icellF.TSW);
-    readNodeFromVector(data, index, icellF.TSE);
-    readNodeFromVector(data, index, icellF.TNW);
-    readNodeFromVector(data, index, icellF.TNE);
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseNodeSetBlock3DConnector::readNodeFromVector(vector_type &data, int &index, LBMReal *inode)
-{
-    for (int i = D3Q27System::STARTF; i < D3Q27System::ENDF + 1; i++) {
-        inode[i] = data[index++];
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseNodeSetBlock3DConnector::writeICellCtoData(vector_type &data, int &index, LBMReal *icellC)
-{
-    for (int i = D3Q27System::STARTF; i < D3Q27System::ENDF + 1; i++) {
-        data[index++] = icellC[i];
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseNodeSetBlock3DConnector::findCFCells(int lMinX1, int lMinX2, int lMinX3, int lMaxX1, int lMaxX2,
-                                                      int lMaxX3, INodeSet &inodes)
-{
-    int ix1, ix2, ix3;
-
-    for (ix3 = lMinX3; ix3 <= lMaxX3; ix3 += 2) {
-        for (ix2 = lMinX2; ix2 <= lMaxX2; ix2 += 2) {
-            for (ix1 = lMinX1; ix1 <= lMaxX1; ix1 += 2) {
-                INodeVector inv;
-                inv.push_back(ix1);
-                inv.push_back(ix2);
-                inv.push_back(ix3);
-                // inodes.insert(inv);
-                inodes.push_back(inv);
-            }
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseNodeSetBlock3DConnector::findCFCells()
-{
-    using namespace D3Q27System;
-
-    int lMinX1 = 0, lMinX2 = 0, lMinX3 = 0, lMaxX1 = 0, lMaxX2 = 0, lMaxX3 = 0;
-
-    //////////////////////////////////////////////////////
-    // Debug
-    //////////////////////////////////////////////////////
-    //   if (block.lock()->getGlobalID() == 2183)
-    //   {
-    //      int test = 0;
-    //   }
-
-    switch (sendDir) {
-            // faces
-        case E:
-        case W:
-            if (sendDir == E) {
-                lMinX1 = maxX1 - 3;
-                lMaxX1 = lMinX1;
-            } else if (sendDir == W) {
-                lMinX1 = 2;
-                lMaxX1 = lMinX1;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMinX2 = minX2;
-                lMaxX2 = maxX2 + maxOffX2 - 1;
-                lMinX3 = minX3;
-                lMaxX3 = maxX3 + maxOffX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMinX2 = minX2 + minOffX2;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = minX3;
-                lMaxX3 = maxX3 + maxOffX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type01) {
-                lMinX2 = minX2;
-                lMaxX2 = maxX2 + maxOffX2 - 1;
-                lMinX3 = minX3 + minOffX3;
-                lMaxX3 = maxX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type11) {
-                lMinX2 = minX2 + minOffX2;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = minX3 + minOffX3;
-                lMaxX3 = maxX3 - 1;
-            }
-            findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetReceiver);
-            break;
-        case N:
-        case S:
-            if (sendDir == N) {
-                lMinX2 = maxX2 - 3;
-                lMaxX2 = lMinX2;
-            } else if (sendDir == S) {
-                lMinX2 = 2;
-                lMaxX2 = lMinX2;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMinX1 = minX1;
-                lMaxX1 = maxX1 + maxOffX1 - 1;
-                lMinX3 = minX3;
-                lMaxX3 = maxX3 + maxOffX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMinX1 = minX1 + minOffX1;
-                lMaxX1 = maxX1;
-                lMinX3 = minX3;
-                lMaxX3 = maxX3 + maxOffX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type01) {
-                lMinX1 = minX1;
-                lMaxX1 = maxX1 + maxOffX1 - 1;
-                lMinX3 = minX3 + minOffX3;
-                lMaxX3 = maxX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type11) {
-                lMinX1 = minX1 + minOffX1;
-                lMaxX1 = maxX1 - 1;
-                lMinX3 = minX3 + minOffX3;
-                lMaxX3 = maxX3 - 1;
-            }
-            findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetReceiver);
-            break;
-        case T:
-        case B:
-            if (sendDir == T) {
-                lMinX3 = maxX3 - 3;
-                lMaxX3 = lMinX3;
-            } else if (sendDir == B) {
-                lMinX3 = 2;
-                lMaxX3 = lMinX3;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMinX1 = minX1;
-                lMaxX1 = maxX1 + maxOffX1 - 1;
-                lMinX2 = minX2;
-                lMaxX2 = maxX2 + maxOffX2 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMinX1 = minX1 + minOffX1;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = minX2;
-                lMaxX2 = maxX2 + maxOffX2 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type01) {
-                lMinX1 = minX1;
-                lMaxX1 = maxX1 + maxOffX1 - 1;
-                lMinX2 = minX2 + minOffX2;
-                lMaxX2 = maxX2 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type11) {
-                lMinX1 = minX1 + minOffX1;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = minX2 + minOffX2;
-                lMaxX2 = maxX2 - 1;
-            }
-            findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetReceiver);
-            break;
-
-            // edges
-            // N-S-E-W
-        case NE:
-        case SW:
-        case SE:
-        case NW:
-            if (sendDir == NE) {
-                lMinX1 = maxX1 - 3;
-                lMaxX1 = lMinX1 + 2;
-                lMinX2 = maxX2 - 3;
-                lMaxX2 = lMinX2 + 2;
-            } else if (sendDir == SW) {
-                lMinX1 = 0;
-                lMaxX1 = lMinX1 + 3;
-                lMinX2 = 0;
-                lMaxX2 = lMinX2 + 3;
-            } else if (sendDir == SE) {
-                lMinX1 = maxX1 - 3;
-                lMaxX1 = lMinX1 + 2;
-                lMinX2 = 0;
-                lMaxX2 = lMinX2 + 2;
-            } else if (sendDir == NW) {
-                lMinX1 = 0;
-                lMaxX1 = lMinX1 + 2;
-                lMinX2 = maxX2 - 3;
-                lMaxX2 = lMinX2 + 2;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMinX3 = minX3;
-                lMaxX3 = maxX3 + maxOffX3 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMinX3 = minX3 + minOffX3;
-                lMaxX3 = maxX3 - 1;
-            }
-
-            findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetReceiver);
-            break;
-            // T-B-E-W
-        case TE:
-        case BW:
-        case BE:
-        case TW:
-            if (sendDir == TE) {
-                lMinX1 = maxX1 - 3;
-                lMaxX1 = lMinX1 + 2;
-                lMinX3 = maxX3 - 3;
-                lMaxX3 = lMinX3 + 2;
-            } else if (sendDir == BW) {
-                lMinX1 = 0;
-                lMaxX1 = lMinX1 + 2;
-                lMinX3 = 0;
-                lMaxX3 = lMinX3 + 2;
-            } else if (sendDir == BE) {
-                lMinX1 = maxX1 - 3;
-                lMaxX1 = lMinX1 + 2;
-                lMinX3 = 0;
-                lMaxX3 = lMinX3 + 2;
-            } else if (sendDir == TW) {
-                lMinX1 = 0;
-                lMaxX1 = lMinX1 + 2;
-                lMinX3 = maxX3 - 3;
-                lMaxX3 = lMinX3 + 2;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMinX2 = minX2;
-                lMaxX2 = maxX2 + maxOffX2 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMinX2 = minX2 + minOffX2;
-                lMaxX2 = maxX2 - 1;
-            }
-
-            findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetReceiver);
-            break;
-            // T-B-N-S
-        case TN:
-        case BS:
-        case BN:
-        case TS:
-            if (sendDir == TN) {
-                lMinX2 = maxX2 - 3;
-                lMaxX2 = lMinX2 + 2;
-                lMinX3 = maxX3 - 3;
-                lMaxX3 = lMinX3 + 2;
-            } else if (sendDir == BS) {
-                lMinX2 = 0;
-                lMaxX2 = lMinX2 + 2;
-                lMinX3 = 0;
-                lMaxX3 = lMinX3 + 2;
-            } else if (sendDir == BN) {
-                lMinX2 = maxX2 - 3;
-                lMaxX2 = lMinX2 + 2;
-                lMinX3 = 0;
-                lMaxX3 = lMinX3 + 2;
-            } else if (sendDir == TS) {
-                lMinX2 = 0;
-                lMaxX2 = lMinX2 + 2;
-                lMinX3 = maxX3 - 3;
-                lMaxX3 = lMinX3 + 2;
-            }
-
-            if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type00) {
-                lMinX1 = minX1;
-                lMaxX1 = maxX1 + maxOffX1 - 1;
-            } else if (FineToCoarseBlock3DConnector::connType == FineToCoarseBlock3DConnector::Type10) {
-                lMinX1 = minX1 + minOffX1;
-                lMaxX1 = maxX1 - 1;
-            }
-
-            findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetReceiver);
-            break;
-            // corners
-        case TNE:
-        case TNW:
-        case TSE:
-        case TSW:
-        case BNE:
-        case BNW:
-        case BSE:
-        case BSW:
-            if (sendDir == TNE) {
-                lMinX1 = maxX1 - 3;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = maxX2 - 3;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = maxX3 - 3;
-                lMaxX3 = maxX3 - 1;
-            } else if (sendDir == TNW) {
-                lMinX1 = 0;
-                lMaxX1 = 2;
-                lMinX2 = maxX2 - 3;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = maxX3 - 3;
-                lMaxX3 = maxX3 - 1;
-            } else if (sendDir == TSE) {
-                lMinX1 = maxX1 - 3;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = 0;
-                lMaxX2 = 2;
-                lMinX3 = maxX3 - 3;
-                lMaxX3 = maxX3 - 1;
-            } else if (sendDir == TSW) {
-                lMinX1 = 0;
-                lMaxX1 = 2;
-                lMinX2 = 0;
-                lMaxX2 = 2;
-                lMinX3 = maxX3 - 3;
-                lMaxX3 = maxX3 - 1;
-            } else if (sendDir == BNE) {
-                lMinX1 = maxX1 - 3;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = maxX2 - 3;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = 0;
-                lMaxX3 = 2;
-            } else if (sendDir == BNW) {
-                lMinX1 = 0;
-                lMaxX1 = 2;
-                lMinX2 = maxX2 - 3;
-                lMaxX2 = maxX2 - 1;
-                lMinX3 = 0;
-                lMaxX3 = 2;
-            } else if (sendDir == BSE) {
-                lMinX1 = maxX1 - 3;
-                lMaxX1 = maxX1 - 1;
-                lMinX2 = 0;
-                lMaxX2 = 2;
-                lMinX3 = 0;
-                lMaxX3 = 2;
-            } else if (sendDir == BSW) {
-                lMinX1 = 0;
-                lMaxX1 = 2;
-                lMinX2 = 0;
-                lMaxX2 = 2;
-                lMinX3 = 0;
-                lMaxX3 = 2;
-            }
-            findCFCells(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, iNodeSetReceiver);
-            break;
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-void FineToCoarseNodeSetBlock3DConnector::distributeReceiveVectors()
-{
-    using namespace D3Q27System;
-
-    SPtr<DistributionArray3D> fTo =
-        FineToCoarseBlock3DConnector::block.lock()->getKernel()->getDataSet()->getFdistributions();
-
-    int index = 0;
-
-    vector_type &data = this->receiver->getData();
-
-    for (INodeVector inode : iNodeSetReceiver) {
-        D3Q27ICell icellF;
-        this->readICellFfromData(data, index, icellF);
-        iprocessor->writeICellInv(fTo, icellF, inode[0], inode[1], inode[2]);
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-//
-// void FineToCoarseNodeSetBlock3DConnector::getLocalMinMax(int& minX1, int& minX2, int& minX3, int& maxX1, int& maxX2,
-// int& maxX3)
-//{
-//   using namespace D3Q27System;
-//   int TminX1 = minX1; int TminX2 = minX2; int TminX3 = minX3; int TmaxX1 = maxX1; int TmaxX2 = maxX2; int TmaxX3 =
-//   maxX3;
-//
-//   if (block.lock()->hasInterpolationFlagFC(E))
-//   {
-//      if (maxX1==TmaxX1) maxX1 -= 2;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(W))
-//   {
-//      if (minX1==TminX1) minX1 += 4;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(N))
-//   {
-//      if (maxX2==TmaxX2) maxX2 -= 2;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(S))
-//   {
-//      if (minX2==TminX2) minX2 += 4;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(T))
-//   {
-//      if (maxX3==TmaxX3) maxX3 -= 2;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(B))
-//   {
-//      if (minX3==TminX3) minX3 += 4;
-//   }
-//
-//   ////////////
-//   /////E-W-N-S
-//   if (block.lock()->hasInterpolationFlagFC(NE)&& !block.lock()->hasInterpolationFlagFC(N) &&
-//   !block.lock()->hasInterpolationFlagFC(E))
-//   {
-//      if (maxX1==TmaxX1) maxX1 -= 2;
-//      if (maxX2==TmaxX2) maxX2 -= 2;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(SW)&& !block.lock()->hasInterpolationFlagFC(W) &&
-//   !block.lock()->hasInterpolationFlagFC(S))
-//   {
-//      if (minX1==TminX1) minX1 += 4;
-//      if (minX2==TminX2) minX2 += 4;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(SE)&& !block.lock()->hasInterpolationFlagFC(E) &&
-//   !block.lock()->hasInterpolationFlagFC(S))
-//   {
-//      if (maxX1==TmaxX1) maxX1 -= 2;
-//      if (minX2==TminX2) minX2 += 4;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(NW)&& !block.lock()->hasInterpolationFlagFC(N) &&
-//   !block.lock()->hasInterpolationFlagFC(W))
-//   {
-//      if (minX1==TminX1) minX1 += 4;
-//      if (maxX2==TmaxX2) maxX2 -= 2;
-//   }
-//
-//   //////T-B-E-W
-//   if (block.lock()->hasInterpolationFlagFC(TE) && !block.lock()->hasInterpolationFlagFC(E) &&
-//   !block.lock()->hasInterpolationFlagFC(T))
-//   {
-//      if (maxX1==TmaxX1) maxX1 -= 2;
-//      if (maxX3==TmaxX3) maxX3 -= 2;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(BW)&& !block.lock()->hasInterpolationFlagFC(W) &&
-//   !block.lock()->hasInterpolationFlagFC(B))
-//   {
-//      if (minX1==TminX1) minX1 += 4;
-//      if (minX3==TminX3) minX3 += 4;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(BE)&& !block.lock()->hasInterpolationFlagFC(E) &&
-//   !block.lock()->hasInterpolationFlagFC(B))
-//   {
-//      if (maxX1==TmaxX1) maxX1 -= 2;
-//      if (minX3==TminX3) minX3 += 4;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(TW)&& !block.lock()->hasInterpolationFlagFC(W) &&
-//   !block.lock()->hasInterpolationFlagFC(T))
-//   {
-//      if (minX1==TminX1) minX1 += 4;
-//      if (maxX3==TmaxX3) maxX3 -= 2;
-//   }
-//
-//
-//   ////T-B-N-S
-//   if (block.lock()->hasInterpolationFlagFC(TN)&& !block.lock()->hasInterpolationFlagFC(N) &&
-//   !block.lock()->hasInterpolationFlagFC(T))
-//   {
-//      if (maxX2==TmaxX2) maxX2 -= 2;
-//      if (maxX3==TmaxX3) maxX3 -= 2;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(BS)&& !block.lock()->hasInterpolationFlagFC(S) &&
-//   !block.lock()->hasInterpolationFlagFC(B))
-//   {
-//      if (minX2==TminX2) minX2 += 4;
-//      if (minX3==TminX3) minX3 += 4;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(BN)&& !block.lock()->hasInterpolationFlagFC(N) &&
-//   !block.lock()->hasInterpolationFlagFC(B))
-//   {
-//      if (maxX2==TmaxX2) maxX2 -= 2;
-//      if (minX3==TminX3) minX3 += 4;
-//   }
-//   if (block.lock()->hasInterpolationFlagFC(TS) && !block.lock()->hasInterpolationFlagFC(S) &&
-//   !block.lock()->hasInterpolationFlagFC(T))
-//   {
-//      if (minX2==TminX2) minX2 += 4;
-//      if (maxX3==TmaxX3) maxX3 -= 2;
-//   }
-//}
-//////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseNodeSetBlock3DConnector.h b/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseNodeSetBlock3DConnector.h
deleted file mode 100644
index bcf29041e06c85611fd478704c09491c0c0a67da..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseNodeSetBlock3DConnector.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/// \file CoarseToFineNodeSetBlock3DConnector.h
-/// \class CoarseToFineNodeSetBlock3DConnector
-/// \brief Connector interpolates and sends data from coarse level to fine.
-/// \author Konstantin Kutscher
-/// \date 21.05.2015
-
-#ifndef FineToCoarseNodeSetBlock3DConnector_H
-#define FineToCoarseNodeSetBlock3DConnector_H
-
-#include "Block3D.h"
-#include "D3Q27System.h"
-#include "FineToCoarseBlock3DConnector.h"
-#include "Grid3D.h"
-#include "InterpolationProcessor.h"
-#include "LBMKernel.h"
-#include "MathUtil.hpp"
-#include <PointerDefinitions.h>
-#include <vector>
-
-class Block3D;
-
-// daten werden in einen vector (dieser befindet sich im transmitter) kopiert
-// der vector wird via transmitter uebertragen
-// transmitter kann ein lokal, MPI, RCG, CTL oder was auch immer fuer ein
-// transmitter sein, der von Transmitter abgeleitet ist ;-)
-
-class FineToCoarseNodeSetBlock3DConnector : public FineToCoarseBlock3DConnector
-{
-public:
-    FineToCoarseNodeSetBlock3DConnector(SPtr<Block3D> block, VectorTransmitterPtr sender, VectorTransmitterPtr receiver,
-                                        int sendDir, InterpolationProcessorPtr iprocessor, CFconnectorType connType);
-    void init() override;
-    void fillSendVectors() override;
-    void distributeReceiveVectors() override;
-
-protected:
-    using INodeVector = std::vector<int>;
-    using INodeSet    = std::vector<INodeVector>;
-    INodeSet iNodeSetSender;
-    INodeSet iNodeSetReceiver;
-
-    void readICellFfromData(vector_type &data, int &index, D3Q27ICell &icellF);
-    void readNodeFromVector(vector_type &data, int &index, LBMReal *inode);
-
-    void writeICellCtoData(vector_type &data, int &index, LBMReal *icellC);
-
-    void findFCCells();
-    void findFCCells(int lMinX1, int lMinX2, int lMinX3, int lMaxX1, int lMaxX2, int lMaxX3, INodeSet &inodes);
-
-    void findCFCells();
-    void findCFCells(int lMinX1, int lMinX2, int lMinX3, int lMaxX1, int lMaxX2, int lMaxX3, INodeSet &inodes);
-
-    // void getLocalMinMax(int& minX1, int& minX2, int& minX3, int& maxX1, int& maxX2, int& maxX3);
-
-    int bMaxX1, bMaxX2, bMaxX3;
-
-    int minX1;
-    int minX2;
-    int minX3;
-
-    int maxX1;
-    int maxX2;
-    int maxX3;
-
-    int minOffX1;
-    int minOffX2;
-    int minOffX3;
-
-    int maxOffX1;
-    int maxOffX2;
-    int maxOffX3;
-};
-
-#endif
diff --git a/src/cpu/VirtualFluidsCore/Visitors/ConnectorBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/ConnectorBlockVisitor.cpp
deleted file mode 100644
index af78f95185f3f24bd669bd75aad656fe205fbc5c..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Visitors/ConnectorBlockVisitor.cpp
+++ /dev/null
@@ -1,484 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file SetConnectorsBlockVisitor.cpp
-//! \ingroup Visitors
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include "ConnectorBlockVisitor.h"
-#include "Communicator.h"
-#include "ConnectorFactory.h"
-#include "Grid3D.h"
-#include "Grid3DSystem.h"
-#include "InterpolationProcessor.h"
-
-ConnectorBlockVisitor::ConnectorBlockVisitor(SPtr<Communicator> comm, LBMReal nu, InterpolationProcessorPtr iProcessor,
-                                             SPtr<ConnectorFactory> cFactory)
-    : Block3DVisitor(0, Grid3DSystem::MAXLEVEL), comm(comm), nu(nu), iProcessor(iProcessor), cFactory(cFactory)
-{
-}
-//////////////////////////////////////////////////////////////////////////
-ConnectorBlockVisitor::~ConnectorBlockVisitor(void) = default;
-//////////////////////////////////////////////////////////////////////////
-void ConnectorBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block)
-{
-    if (!block)
-        return;
-
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::visit() - start");
-    UBLOG(logDEBUG5, block->toString());
-
-    gridRank = comm->getProcessID();
-    grid->setRank(gridRank);
-
-    setSameLevelConnectors(grid, block);
-
-    if (grid->getFinestInitializedLevel() > grid->getCoarsestInitializedLevel())
-        setInterpolationConnectors(grid, block);
-
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::visit() - end");
-}
-//////////////////////////////////////////////////////////////////////////
-void ConnectorBlockVisitor::setSameLevelConnectors(SPtr<Grid3D> grid, SPtr<Block3D> block)
-{
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::setSameLevelConnectors() - start");
-    int blockRank = block->getRank();
-    if (gridRank == blockRank && block->isActive()) {
-        block->clearWeight();
-        std::vector<SPtr<Block3D>> neighbors;
-        int ix1   = block->getX1();
-        int ix2   = block->getX2();
-        int ix3   = block->getX3();
-        int level = block->getLevel();
-
-        for (int dir = 0; dir < D3Q27System::ENDDIR; dir++) {
-            SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, ix1, ix2, ix3, level);
-
-            if (neighBlock) {
-                int neighBlockRank = neighBlock->getRank();
-                if (blockRank == neighBlockRank && neighBlock->isActive()) {
-                    SPtr<Block3DConnector> connector;
-                    connector = cFactory->createSameLevelDirectConnector(block, neighBlock, dir);
-                    block->setConnector(connector);
-                } else if (blockRank != neighBlockRank && neighBlock->isActive()) {
-                    setRemoteConnectors(block, neighBlock, dir);
-                }
-            }
-        }
-    }
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::setSameLevelConnectors() - end");
-}
-//////////////////////////////////////////////////////////////////////////
-void ConnectorBlockVisitor::setRemoteConnectors(SPtr<Block3D> sblock, SPtr<Block3D> tblock, int dir)
-{
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::setRemoteConnectors() - start");
-    CreateTransmittersHelper helper;
-    CreateTransmittersHelper::TransmitterPtr sender, receiver;
-    helper.createTransmitters(sblock, tblock, dir, CreateTransmittersHelper::NONE, sender, receiver, comm,
-                              CreateTransmittersHelper::MPI);
-
-    SPtr<Block3DConnector> connector;
-    connector = cFactory->createSameLevelVectorConnector(sblock, sender, receiver, dir);
-    sblock->setConnector(connector);
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::setRemoteConnectors() - end");
-}
-//////////////////////////////////////////////////////////////////////////
-void ConnectorBlockVisitor::setInterpolationConnectors(SPtr<Grid3D> grid, SPtr<Block3D> block)
-{
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::setInterpolationConnectors() - start");
-    //   int blockRank = block->getRank();
-
-    // search for all blocks with different ranks
-    if (block->hasInterpolationFlagCF() && block->isActive()) {
-        int fbx1  = block->getX1() << 1;
-        int fbx2  = block->getX2() << 1;
-        int fbx3  = block->getX3() << 1;
-        int level = block->getLevel() + 1;
-
-        if (block->hasInterpolationFlagCF(D3Q27System::E)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3, level);
-            SPtr<Block3D> fblock01 = grid->getBlock(fbx1 + 1, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock11 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3 + 1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::E);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::W)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1, fbx2 + 1, fbx3, level);
-            SPtr<Block3D> fblock01 = grid->getBlock(fbx1, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock11 = grid->getBlock(fbx1, fbx2 + 1, fbx3 + 1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::W);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::N)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2 + 1, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3, level);
-            SPtr<Block3D> fblock01 = grid->getBlock(fbx1, fbx2 + 1, fbx3 + 1, level);
-            SPtr<Block3D> fblock11 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3 + 1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::N);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::S)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock01 = grid->getBlock(fbx1, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock11 = grid->getBlock(fbx1 + 1, fbx2, fbx3 + 1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::S);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::T)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock01 = grid->getBlock(fbx1, fbx2 + 1, fbx3 + 1, level);
-            SPtr<Block3D> fblock11 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3 + 1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::T);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::B)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock01 = grid->getBlock(fbx1, fbx2 + 1, fbx3, level);
-            SPtr<Block3D> fblock11 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::B);
-        }
-
-        //////NE-NW-SE-SW
-        if (block->hasInterpolationFlagCF(D3Q27System::NE) && !block->hasInterpolationFlagCF(D3Q27System::N) &&
-            !block->hasInterpolationFlagCF(D3Q27System::E)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3 + 0, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3 + 1, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::NE);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::SW) && !block->hasInterpolationFlagCF(D3Q27System::W) &&
-            !block->hasInterpolationFlagCF(D3Q27System::S)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::SW);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::SE) && !block->hasInterpolationFlagCF(D3Q27System::E) &&
-            !block->hasInterpolationFlagCF(D3Q27System::S)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 1, fbx2, fbx3 + 0, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::SE);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::NW) && !block->hasInterpolationFlagCF(D3Q27System::N) &&
-            !block->hasInterpolationFlagCF(D3Q27System::W)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2 + 1, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1, fbx2 + 1, fbx3 + 1, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::NW);
-        }
-
-        /////////TE-BW-BE-TW 1-0
-        if (block->hasInterpolationFlagCF(D3Q27System::TE) && !block->hasInterpolationFlagCF(D3Q27System::E) &&
-            !block->hasInterpolationFlagCF(D3Q27System::T)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 1, fbx2 + 0, fbx3 + 1, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3 + 1, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::TE);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::BW) && !block->hasInterpolationFlagCF(D3Q27System::W) &&
-            !block->hasInterpolationFlagCF(D3Q27System::B)) {
-
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2 + 0, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1, fbx2 + 1, fbx3, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::BW);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::BE) && !block->hasInterpolationFlagCF(D3Q27System::E) &&
-            !block->hasInterpolationFlagCF(D3Q27System::B)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 1, fbx2 + 0, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::BE);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::TW) && !block->hasInterpolationFlagCF(D3Q27System::W) &&
-            !block->hasInterpolationFlagCF(D3Q27System::T)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2 + 0, fbx3 + 1, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1, fbx2 + 1, fbx3 + 1, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::TW);
-        }
-
-        //////TN-BS-BN-TS
-        if (block->hasInterpolationFlagCF(D3Q27System::TN) && !block->hasInterpolationFlagCF(D3Q27System::N) &&
-            !block->hasInterpolationFlagCF(D3Q27System::T)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 0, fbx2 + 1, fbx3 + 1, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3 + 1, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::TN);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::BS) && !block->hasInterpolationFlagCF(D3Q27System::S) &&
-            !block->hasInterpolationFlagCF(D3Q27System::B)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 0, fbx2, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::BS);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::BN) && !block->hasInterpolationFlagCF(D3Q27System::N) &&
-            !block->hasInterpolationFlagCF(D3Q27System::B)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 0, fbx2 + 1, fbx3, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::BN);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::TS) && !block->hasInterpolationFlagCF(D3Q27System::S) &&
-            !block->hasInterpolationFlagCF(D3Q27System::T)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 0, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock10 = grid->getBlock(fbx1 + 1, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock01;
-            SPtr<Block3D> fblock11;
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::TS);
-        }
-
-        //////corners
-        if (block->hasInterpolationFlagCF(D3Q27System::TNE) && !block->hasInterpolationFlagCF(D3Q27System::TE) &&
-            !block->hasInterpolationFlagCF(D3Q27System::TN) && !block->hasInterpolationFlagCF(D3Q27System::NE) &&
-            !block->hasInterpolationFlagCF(D3Q27System::T) && !block->hasInterpolationFlagCF(D3Q27System::N) &&
-            !block->hasInterpolationFlagCF(D3Q27System::E)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3 + 1, level);
-            SPtr<Block3D> fblock10; // = grid->getBlock(fbx1+1, fbx2+1, fbx3+0, level);
-            SPtr<Block3D> fblock01; // = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
-            SPtr<Block3D> fblock11; // = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::TNE);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::TSW) && !block->hasInterpolationFlagCF(D3Q27System::TW) &&
-            !block->hasInterpolationFlagCF(D3Q27System::TS) && !block->hasInterpolationFlagCF(D3Q27System::SW) &&
-            !block->hasInterpolationFlagCF(D3Q27System::T) && !block->hasInterpolationFlagCF(D3Q27System::W) &&
-            !block->hasInterpolationFlagCF(D3Q27System::S)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock10; // = grid->getBlock(fbx1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock01; // = grid->getBlock(fbx1, fbx2, fbx3+1, level);
-            SPtr<Block3D> fblock11; // = grid->getBlock(fbx1, fbx2, fbx3+1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::TSW);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::TSE) && !block->hasInterpolationFlagCF(D3Q27System::TE) &&
-            !block->hasInterpolationFlagCF(D3Q27System::TS) && !block->hasInterpolationFlagCF(D3Q27System::SE) &&
-            !block->hasInterpolationFlagCF(D3Q27System::T) && !block->hasInterpolationFlagCF(D3Q27System::E) &&
-            !block->hasInterpolationFlagCF(D3Q27System::S)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 1, fbx2, fbx3 + 1, level);
-            SPtr<Block3D> fblock10; // = grid->getBlock(fbx1+1, fbx2, fbx3+0, level);
-            SPtr<Block3D> fblock01; // = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
-            SPtr<Block3D> fblock11; // = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::TSE);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::TNW) && !block->hasInterpolationFlagCF(D3Q27System::TW) &&
-            !block->hasInterpolationFlagCF(D3Q27System::TN) && !block->hasInterpolationFlagCF(D3Q27System::NW) &&
-            !block->hasInterpolationFlagCF(D3Q27System::T) && !block->hasInterpolationFlagCF(D3Q27System::N) &&
-            !block->hasInterpolationFlagCF(D3Q27System::W)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2 + 1, fbx3 + 1, level);
-            SPtr<Block3D> fblock10; // = grid->getBlock(fbx1, fbx2+1, fbx3, level);
-            SPtr<Block3D> fblock01; // = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
-            SPtr<Block3D> fblock11; // = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::TNW);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::BNE) && !block->hasInterpolationFlagCF(D3Q27System::BE) &&
-            !block->hasInterpolationFlagCF(D3Q27System::BN) && !block->hasInterpolationFlagCF(D3Q27System::NE) &&
-            !block->hasInterpolationFlagCF(D3Q27System::B) && !block->hasInterpolationFlagCF(D3Q27System::N) &&
-            !block->hasInterpolationFlagCF(D3Q27System::E)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 1, fbx2 + 1, fbx3 + 0, level);
-            SPtr<Block3D> fblock10; // = grid->getBlock(fbx1+1, fbx2+1, fbx3+0, level);
-            SPtr<Block3D> fblock01; // = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
-            SPtr<Block3D> fblock11; // = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::BNE);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::BSW) && !block->hasInterpolationFlagCF(D3Q27System::BS) &&
-            !block->hasInterpolationFlagCF(D3Q27System::BW) && !block->hasInterpolationFlagCF(D3Q27System::SW) &&
-            !block->hasInterpolationFlagCF(D3Q27System::B) && !block->hasInterpolationFlagCF(D3Q27System::W) &&
-            !block->hasInterpolationFlagCF(D3Q27System::S)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2, fbx3 + 0, level);
-            SPtr<Block3D> fblock10; // = grid->getBlock(fbx1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock01; // = grid->getBlock(fbx1, fbx2, fbx3+1, level);
-            SPtr<Block3D> fblock11; // = grid->getBlock(fbx1, fbx2, fbx3+1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::BSW);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::BSE) && !block->hasInterpolationFlagCF(D3Q27System::BS) &&
-            !block->hasInterpolationFlagCF(D3Q27System::BE) && !block->hasInterpolationFlagCF(D3Q27System::SE) &&
-            !block->hasInterpolationFlagCF(D3Q27System::B) && !block->hasInterpolationFlagCF(D3Q27System::E) &&
-            !block->hasInterpolationFlagCF(D3Q27System::S)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1 + 1, fbx2, fbx3, level);
-            SPtr<Block3D> fblock10; // = grid->getBlock(fbx1+1, fbx2, fbx3+0, level);
-            SPtr<Block3D> fblock01; // = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
-            SPtr<Block3D> fblock11; // = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::BSE);
-        }
-        if (block->hasInterpolationFlagCF(D3Q27System::BNW) && !block->hasInterpolationFlagCF(D3Q27System::BN) &&
-            !block->hasInterpolationFlagCF(D3Q27System::BW) && !block->hasInterpolationFlagCF(D3Q27System::NW) &&
-            !block->hasInterpolationFlagCF(D3Q27System::B) && !block->hasInterpolationFlagCF(D3Q27System::N) &&
-            !block->hasInterpolationFlagCF(D3Q27System::W)) {
-            SPtr<Block3D> fblock00 = grid->getBlock(fbx1, fbx2 + 1, fbx3 + 0, level);
-            SPtr<Block3D> fblock10; // = grid->getBlock(fbx1, fbx2+1, fbx3, level);
-            SPtr<Block3D> fblock01; // = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
-            SPtr<Block3D> fblock11; // = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
-
-            setInterpolationConnectors(fblock00, fblock10, fblock01, fblock11, block, D3Q27System::BNW);
-        }
-    }
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::setInterpolationConnectors() - end");
-}
-//////////////////////////////////////////////////////////////////////////
-
-void ConnectorBlockVisitor::setInterpolationConnectors(SPtr<Block3D> fblock00, SPtr<Block3D> fblock10,
-                                                       SPtr<Block3D> fblock01, SPtr<Block3D> fblock11,
-                                                       SPtr<Block3D> cBlock, int dir)
-{
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::setInterpolationConnectors(...) - start");
-    int fblock00Rank = -999, fblock10Rank = -999, fblock01Rank = -999, fblock11Rank = -999;
-    if (fblock00)
-        fblock00Rank = fblock00->getRank();
-    if (fblock01)
-        fblock01Rank = fblock01->getRank();
-    if (fblock10)
-        fblock10Rank = fblock10->getRank();
-    if (fblock11)
-        fblock11Rank = fblock11->getRank();
-    int cBlockRank = cBlock->getRank();
-
-    LBMReal omegaF;
-    if (fblock00)
-        omegaF = LBMSystem::calcCollisionFactor(nu, fblock00->getLevel());
-    if (fblock01)
-        omegaF = LBMSystem::calcCollisionFactor(nu, fblock01->getLevel());
-    if (fblock10)
-        omegaF = LBMSystem::calcCollisionFactor(nu, fblock10->getLevel());
-    if (fblock11)
-        omegaF = LBMSystem::calcCollisionFactor(nu, fblock11->getLevel());
-    LBMReal omegaC = LBMSystem::calcCollisionFactor(nu, cBlock->getLevel());
-    iProcessor->setOmegas(omegaC, omegaF);
-
-    InterpolationProcessorPtr cIProcessor(iProcessor->clone());
-    InterpolationProcessorPtr fIProcessor00(iProcessor->clone());
-    InterpolationProcessorPtr fIProcessor10(iProcessor->clone());
-    InterpolationProcessorPtr fIProcessor01(iProcessor->clone());
-    InterpolationProcessorPtr fIProcessor11(iProcessor->clone());
-
-    CreateTransmittersHelper::TransmitterPtr senderCF00, receiverCF00, senderCF01, receiverCF01, senderCF10,
-        receiverCF10, senderCF11, receiverCF11, senderFC00, receiverFC00, senderFC01, receiverFC01, senderFC10,
-        receiverFC10, senderFC11, receiverFC11;
-
-    if (fblock00)
-        createTransmitters(cBlock, fblock00, dir, CreateTransmittersHelper::SW, senderCF00, receiverCF00, senderFC00,
-                           receiverFC00);
-    if (fblock01)
-        createTransmitters(cBlock, fblock01, dir, CreateTransmittersHelper::NW, senderCF01, receiverCF01, senderFC01,
-                           receiverFC01);
-    if (fblock10)
-        createTransmitters(cBlock, fblock10, dir, CreateTransmittersHelper::SE, senderCF10, receiverCF10, senderFC10,
-                           receiverFC10);
-    if (fblock11)
-        createTransmitters(cBlock, fblock11, dir, CreateTransmittersHelper::NE, senderCF11, receiverCF11, senderFC11,
-                           receiverFC11);
-
-    if (cBlockRank == gridRank) {
-        SPtr<Block3DConnector> connector =
-            cFactory->createCoarseToFineConnector(cBlock, senderCF00, receiverCF00, senderCF01, receiverCF01,
-                                                  senderCF10, receiverCF10, senderCF11, receiverCF11, dir, cIProcessor);
-        cBlock->setConnector(connector);
-    }
-    if (fblock00 && fblock00Rank == gridRank) {
-        SPtr<Block3DConnector> connector = cFactory->createFineToCoarseConnector(
-            fblock00, senderFC00, receiverFC00, dir, fIProcessor00, FineToCoarseBlock3DConnector::Type00);
-        fblock00->setConnector(connector);
-    }
-    if (fblock01 && fblock01Rank == gridRank) {
-        SPtr<Block3DConnector> connector = cFactory->createFineToCoarseConnector(
-            fblock01, senderFC01, receiverFC01, dir, fIProcessor01, FineToCoarseBlock3DConnector::Type01);
-        fblock01->setConnector(connector);
-    }
-    if (fblock10 && fblock10Rank == gridRank) {
-        SPtr<Block3DConnector> connector = cFactory->createFineToCoarseConnector(
-            fblock10, senderFC10, receiverFC10, dir, fIProcessor10, FineToCoarseBlock3DConnector::Type10);
-        fblock10->setConnector(connector);
-    }
-    if (fblock11 && fblock11Rank == gridRank) {
-        SPtr<Block3DConnector> connector = cFactory->createFineToCoarseConnector(
-            fblock11, senderFC11, receiverFC11, dir, fIProcessor11, FineToCoarseBlock3DConnector::Type11);
-        fblock11->setConnector(connector);
-    }
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::setInterpolationConnectors(...) - end");
-}
-//////////////////////////////////////////////////////////////////////////
-void ConnectorBlockVisitor::createTransmitters(SPtr<Block3D> cBlock, SPtr<Block3D> fBlock, int dir,
-                                               CreateTransmittersHelper::IBlock ib,
-                                               CreateTransmittersHelper::TransmitterPtr &senderCF,
-                                               CreateTransmittersHelper::TransmitterPtr &receiverCF,
-                                               CreateTransmittersHelper::TransmitterPtr &senderFC,
-                                               CreateTransmittersHelper::TransmitterPtr &receiverFC)
-{
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::createTransmitters(...) - start");
-    CreateTransmittersHelper helper;
-    //   bool MPIpool = true;
-    //   bool orthogonal = false;
-    int fBlockRank = fBlock->getRank();
-    int cBlockRank = cBlock->getRank();
-    if (fBlockRank == cBlockRank && fBlockRank == gridRank) {
-        senderCF = receiverFC = CreateTransmittersHelper::TransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-        senderFC = receiverCF = CreateTransmittersHelper::TransmitterPtr(new TbLocalTransmitter<CbVector<LBMReal>>());
-    } else if (cBlockRank == gridRank) {
-        helper.createTransmitters(cBlock, fBlock, dir, ib, senderCF, receiverCF, comm, CreateTransmittersHelper::MPI);
-    } else if (fBlockRank == gridRank) {
-        helper.createTransmitters(fBlock, cBlock, dir, ib, senderFC, receiverFC, comm, CreateTransmittersHelper::MPI);
-    }
-    UBLOG(logDEBUG5, "ConnectorBlockVisitor::createTransmitters(...) - end");
-}
diff --git a/src/cpu/VirtualFluidsCore/Visitors/ConnectorBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/ConnectorBlockVisitor.h
deleted file mode 100644
index 800b80604d7e7d67ab09441ad61c97ec28ca2ac8..0000000000000000000000000000000000000000
--- a/src/cpu/VirtualFluidsCore/Visitors/ConnectorBlockVisitor.h
+++ /dev/null
@@ -1,74 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file SetConnectorsBlockVisitor.h
-//! \ingroup Visitors
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef ConnectorBlockVisitor_H
-#define ConnectorBlockVisitor_H
-
-#include <PointerDefinitions.h>
-
-#include "Block3DVisitor.h"
-#include "CreateTransmittersHelper.h"
-#include "D3Q27System.h"
-
-class Grid3D;
-class Block3D;
-class InterpolationProcessor;
-class ConnectorFactory;
-
-class ConnectorBlockVisitor : public Block3DVisitor
-{
-public:
-    ConnectorBlockVisitor(SPtr<Communicator> comm, LBMReal nu, SPtr<InterpolationProcessor> iProcessor,
-                          SPtr<ConnectorFactory> cFactory);
-    ~ConnectorBlockVisitor() override;
-    void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
-    //////////////////////////////////////////////////////////////////////////
-protected:
-    void setSameLevelConnectors(SPtr<Grid3D> grid, SPtr<Block3D> block);
-    void setRemoteConnectors(SPtr<Block3D> sblock, SPtr<Block3D> tblock, int dir);
-    void setInterpolationConnectors(SPtr<Grid3D> grid, SPtr<Block3D> block);
-    void setInterpolationConnectors(SPtr<Block3D> fBlockSW, SPtr<Block3D> fBlockSE, SPtr<Block3D> fBlockNW,
-                                    SPtr<Block3D> fBlockNE, SPtr<Block3D> cBlock, int dir);
-    void createTransmitters(SPtr<Block3D> cBlock, SPtr<Block3D> fBlock, int dir, CreateTransmittersHelper::IBlock ib,
-                            CreateTransmittersHelper::TransmitterPtr &senderCF,
-                            CreateTransmittersHelper::TransmitterPtr &receiverCF,
-                            CreateTransmittersHelper::TransmitterPtr &senderFC,
-                            CreateTransmittersHelper::TransmitterPtr &receiverFC);
-    SPtr<Communicator> comm;
-    int gridRank;
-    LBMReal nu;
-    SPtr<InterpolationProcessor> iProcessor;
-    SPtr<ConnectorFactory> cFactory;
-};
-
-#endif // ConnectorBlockVisitor_H