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