Skip to content
Snippets Groups Projects
Commit 8d7f4a22 authored by kutscher's avatar kutscher
Browse files

remove not used connector classes

parent 565400b5
No related branches found
No related tags found
1 merge request!30Develop
Showing
with 7 additions and 3732 deletions
......@@ -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>
......
#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));
}
#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__
#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();
}
//! \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
//! \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
#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__
//#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));
//}
//#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__
#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();
}
//! \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
/// \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
This diff is collapsed.
//=======================================================================================
// ____ ____ __ ______ __________ __ __ __ __
// \ \ | | | | | _ \ |___ ___| | | | | / \ | |
// \ \ | | | | | |_) | | | | | | | / \ | |
// \ \ | | | | | _ / | | | | | | / /\ \ | |
// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____
// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______|
// \ \ | | ________________________________________________________________
// \ \ | | | ______________________________________________________________|
// \ \| | | | __ __ __ __ ______ _______
// \ | | |_____ | | | | | | | | | _ \ / _____)
// \ | | _____| | | | | | | | | | | \ \ \_______
// \ | | | | |_____ | \_/ | | | | |_/ / _____ |
// \ _____| |__| |________| \_______/ |__| |______/ (_______/
//
// 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment