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

add remote connector for for two phase fields velocity kernel

parent 1f7ec97a
No related branches found
No related tags found
2 merge requests!171Newest Update,!83Fix MPICommunicator
#pathname = d:/temp/MultiphaseDropletTest
pathname = E:/Multiphase/DropletTestSigma2
numOfThreads = 4
numOfThreads = 1
availMem = 10e9
#Grid
......
......@@ -151,16 +151,16 @@ void run(string configname)
SPtr<WriteBlocksCoProcessor> ppblocks(new WriteBlocksCoProcessor(
grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
//SPtr<Grid3DVisitor> metisVisitor(
// new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW));
//InteractorsHelper intHelper(grid, metisVisitor);
//intHelper.selectBlocks();
SPtr<Grid3DVisitor> metisVisitor(
new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE));
InteractorsHelper intHelper(grid, metisVisitor, true);
intHelper.selectBlocks();
ppblocks->process(0);
ppblocks.reset();
unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
int ghostLayer = 3;
int ghostLayer = 5;
unsigned long long numberOfNodesPerBlock =
(unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]);
unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
......@@ -196,7 +196,7 @@ void run(string configname)
}
//intHelper.setBC();
intHelper.setBC();
//grid->accept(bcVisitor);
......
......@@ -55,32 +55,33 @@ void ThreeDistributionsFullVectorConnector2::init()
fDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getFdistributions());
hDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getHdistributions());
h2Dis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getH2distributions());
pressure = block.lock()->getKernel()->getDataSet()->getPressureField();
int anz = 3*27;
int anz = 3*27+1;
switch (sendDir)
{
case D3Q27System::REST: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break;
case D3Q27System::E:
case D3Q27System::W: sender->getData().resize(maxX2*maxX3*anz, 0.0); break;
case D3Q27System::W: sender->getData().resize(maxX2*maxX3*anz*2, 0.0); break;
case D3Q27System::N:
case D3Q27System::S: sender->getData().resize(maxX1*maxX3*anz, 0.0); break;
case D3Q27System::S: sender->getData().resize(maxX1*maxX3*anz*2, 0.0); break;
case D3Q27System::T:
case D3Q27System::B: sender->getData().resize(maxX1*maxX2*anz, 0.0); break;
case D3Q27System::B: sender->getData().resize(maxX1*maxX2*anz*2, 0.0); break;
case D3Q27System::NE:
case D3Q27System::SW:
case D3Q27System::SE:
case D3Q27System::NW: sender->getData().resize(maxX3*anz, 0.0); break;
case D3Q27System::NW: sender->getData().resize(maxX3*anz*4, 0.0); break;
case D3Q27System::TE:
case D3Q27System::BW:
case D3Q27System::BE:
case D3Q27System::TW: sender->getData().resize(maxX2*anz, 0.0); break;
case D3Q27System::TW: sender->getData().resize(maxX2*anz*4, 0.0); break;
case D3Q27System::TN:
case D3Q27System::BS:
case D3Q27System::BN:
case D3Q27System::TS: sender->getData().resize(maxX1*anz, 0.0); break;
case D3Q27System::TS: sender->getData().resize(maxX1*anz*4, 0.0); break;
case D3Q27System::TNE:
case D3Q27System::BSW:
......@@ -89,11 +90,538 @@ void ThreeDistributionsFullVectorConnector2::init()
case D3Q27System::TSE:
case D3Q27System::BNW:
case D3Q27System::BSE:
case D3Q27System::TNW: sender->getData().resize(anz, 0.0); break;
case D3Q27System::TNW: sender->getData().resize(anz*8, 0.0); break;
default: UB_THROW(UbException(UB_EXARGS, "unknown sendDir"));
}
}
//////////////////////////////////////////////////////////////////////////
void ThreeDistributionsFullVectorConnector2::fillSendVectors()
{
updatePointers();
fillData();
}
////////////////////////////////////////////////////////////////////////
void ThreeDistributionsFullVectorConnector2::fillData()
{
////////////////////////////////////////////////////////////
// relation between ghost layer and regular nodes
// maxX1m3 maxX1m2 ... minX1p2 minX1p3 - regular nodes
// minX1 minX1p1 ... maxX1m1 maxX1 - ghost layer
////////////////////////////////////////////////////////////
int minX1 = 0;
int minX1p1 = minX1 + 1;
int minX1p2 = minX1 + 2;
int minX1p3 = minX1 + 3;
int maxX1m1 = maxX1 - 1;
int maxX1m2 = maxX1 - 2;
int maxX1m3 = maxX1 - 3;
int minX2 = 0;
int minX2p1 = minX2 + 1;
int minX2p2 = minX2 + 2;
int minX2p3 = minX2 + 3;
int maxX2m1 = maxX2 - 1;
int maxX2m2 = maxX2 - 2;
int maxX2m3 = maxX2 - 3;
int minX3 = 0;
int minX3p1 = minX3 + 1;
int minX3p2 = minX3 + 2;
int minX3p3 = minX3 + 3;
int maxX3m1 = maxX3 - 1;
int maxX3m2 = maxX3 - 2;
int maxX3m3 = maxX3 - 3;
vector_type &sdata = sender->getData();
int index = 0;
// EAST
if (sendDir == D3Q27System::E) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
fillData(sdata, index, maxX1m3, x2, x3);
fillData(sdata, index, maxX1m2, x2, x3);
}
}
}
// WEST
else if (sendDir == D3Q27System::W) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
fillData(sdata, index, minX1p3, x2, x3);
fillData(sdata, index, minX1p2, x2, x3);
}
}
}
// NORTH
else if (sendDir == D3Q27System::N) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
fillData(sdata, index, x1, maxX2m3, x3);
fillData(sdata, index, x1, maxX2m2, x3);
}
}
}
// SOUTH
else if (sendDir == D3Q27System::S) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
fillData(sdata, index, x1, minX2p3, x3);
fillData(sdata, index, x1, minX2p2, x3);
}
}
}
// TOP
else if (sendDir == D3Q27System::T) {
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
fillData(sdata, index, x1, x2, maxX3m3);
fillData(sdata, index, x1, x2, maxX3m2);
}
}
}
// BOTTOM
else if (sendDir == D3Q27System::B) {
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
fillData(sdata, index, x1, x2, minX3p3);
fillData(sdata, index, x1, x2, minX3p2);
}
}
}
// NORTHEAST
else if (sendDir == D3Q27System::NE) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
fillData(sdata, index, maxX1m3, maxX2m3, x3);
fillData(sdata, index, maxX1m2, maxX2m2, x3);
fillData(sdata, index, maxX1m3, maxX2m2, x3);
fillData(sdata, index, maxX1m2, maxX2m3, x3);
}
}
// NORTHWEST
else if (sendDir == D3Q27System::NW) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
fillData(sdata, index, minX1p3, maxX2m3, x3);
fillData(sdata, index, minX1p2, maxX2m2, x3);
fillData(sdata, index, minX1p3, maxX2m2, x3);
fillData(sdata, index, minX1p2, maxX2m3, x3);
}
}
// SOUTHWEST
else if (sendDir == D3Q27System::SW) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
fillData(sdata, index, minX1p3, minX2p3, x3);
fillData(sdata, index, minX1p2, minX2p2, x3);
fillData(sdata, index, minX1p3, minX2p2, x3);
fillData(sdata, index, minX1p2, minX2p3, x3);
}
}
// SOUTHEAST
else if (sendDir == D3Q27System::SE) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
fillData(sdata, index, maxX1m3, minX2p3, x3);
fillData(sdata, index, maxX1m2, minX2p2, x3);
fillData(sdata, index, maxX1m3, minX2p2, x3);
fillData(sdata, index, maxX1m2, minX2p3, x3);
}
} else if (sendDir == D3Q27System::TE)
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
fillData(sdata, index, maxX1m3, x2, maxX3m3);
fillData(sdata, index, maxX1m2, x2, maxX3m2);
fillData(sdata, index, maxX1m3, x2, maxX3m2);
fillData(sdata, index, maxX1m2, x2, maxX3m3);
}
else if (sendDir == D3Q27System::BW)
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
fillData(sdata, index, minX1p3, x2, minX3p3);
fillData(sdata, index, minX1p2, x2, minX3p2);
fillData(sdata, index, minX1p3, x2, minX3p2);
fillData(sdata, index, minX1p2, x2, minX3p3);
}
else if (sendDir == D3Q27System::BE)
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
fillData(sdata, index, maxX1m3, x2, minX3p3);
fillData(sdata, index, maxX1m2, x2, minX3p2);
fillData(sdata, index, maxX1m3, x2, minX3p2);
fillData(sdata, index, maxX1m2, x2, minX3p3);
}
else if (sendDir == D3Q27System::TW)
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
fillData(sdata, index, minX1p3, x2, maxX3m3);
fillData(sdata, index, minX1p2, x2, maxX3m2);
fillData(sdata, index, minX1p3, x2, maxX3m2);
fillData(sdata, index, minX1p2, x2, maxX3m3);
}
else if (sendDir == D3Q27System::TN)
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
fillData(sdata, index, x1, maxX2m3, maxX3m3);
fillData(sdata, index, x1, maxX2m2, maxX3m2);
fillData(sdata, index, x1, maxX2m3, maxX3m2);
fillData(sdata, index, x1, maxX2m2, maxX3m3);
}
else if (sendDir == D3Q27System::BS)
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
fillData(sdata, index, x1, minX2p3, minX3p3);
fillData(sdata, index, x1, minX2p2, minX3p2);
fillData(sdata, index, x1, minX2p3, minX3p2);
fillData(sdata, index, x1, minX2p2, minX3p3);
}
else if (sendDir == D3Q27System::BN)
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
fillData(sdata, index, x1, maxX2m3, minX3p3);
fillData(sdata, index, x1, maxX2m2, minX3p2);
fillData(sdata, index, x1, maxX2m3, minX3p2);
fillData(sdata, index, x1, maxX2m2, minX3p3);
}
else if (sendDir == D3Q27System::TS)
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
fillData(sdata, index, x1, minX2p3, maxX3m3);
fillData(sdata, index, x1, minX2p2, maxX3m2);
fillData(sdata, index, x1, minX2p3, maxX3m2);
fillData(sdata, index, x1, minX2p2, maxX3m3);
}
else if (sendDir == D3Q27System::TSW) {
fillData(sdata, index, minX1p3, minX2p3, maxX3m3);
fillData(sdata, index, minX1p2, minX2p2, maxX3m2);
fillData(sdata, index, minX1p3, minX2p2, maxX3m2);
fillData(sdata, index, minX1p2, minX2p3, maxX3m2);
fillData(sdata, index, minX1p2, minX2p2, maxX3m3);
fillData(sdata, index, minX1p3, minX2p3, maxX3m2);
fillData(sdata, index, minX1p3, minX2p2, maxX3m3);
fillData(sdata, index, minX1p2, minX2p3, maxX3m3);
} else if (sendDir == D3Q27System::TSE) {
fillData(sdata, index, maxX1m3, minX1p3, maxX3m3);
fillData(sdata, index, maxX1m2, minX1p2, maxX3m2);
fillData(sdata, index, maxX1m3, minX1p2, maxX3m2);
fillData(sdata, index, maxX1m2, minX1p3, maxX3m2);
fillData(sdata, index, maxX1m2, minX1p2, maxX3m3);
fillData(sdata, index, maxX1m3, minX1p3, maxX3m2);
fillData(sdata, index, maxX1m3, minX1p2, maxX3m3);
fillData(sdata, index, maxX1m2, minX1p3, maxX3m3);
} else if (sendDir == D3Q27System::TNW) {
fillData(sdata, index, minX1p3, maxX2m3, maxX3m3);
fillData(sdata, index, minX1p2, maxX2m2, maxX3m2);
fillData(sdata, index, minX1p3, maxX2m2, maxX3m2);
fillData(sdata, index, minX1p2, maxX2m3, maxX3m2);
fillData(sdata, index, minX1p2, maxX2m2, maxX3m3);
fillData(sdata, index, minX1p3, maxX2m3, maxX3m2);
fillData(sdata, index, minX1p3, maxX2m2, maxX3m3);
fillData(sdata, index, minX1p2, maxX2m3, maxX3m3);
} else if (sendDir == D3Q27System::TNE) {
fillData(sdata, index, maxX1m3, maxX2m3, maxX3m3);
fillData(sdata, index, maxX1m2, maxX2m2, maxX3m2);
fillData(sdata, index, maxX1m3, maxX2m2, maxX3m2);
fillData(sdata, index, maxX1m2, maxX2m3, maxX3m2);
fillData(sdata, index, maxX1m2, maxX2m2, maxX3m3);
fillData(sdata, index, maxX1m3, maxX2m3, maxX3m2);
fillData(sdata, index, maxX1m3, maxX2m2, maxX3m3);
fillData(sdata, index, maxX1m2, maxX2m3, maxX3m3);
} else if (sendDir == D3Q27System::BSW) {
fillData(sdata, index, minX1p3, minX2p3, minX3p3);
fillData(sdata, index, minX1p2, minX2p2, minX3p2);
fillData(sdata, index, minX1p3, minX2p2, minX3p2);
fillData(sdata, index, minX1p2, minX2p3, minX3p2);
fillData(sdata, index, minX1p2, minX2p2, minX3p3);
fillData(sdata, index, minX1p3, minX2p3, minX3p2);
fillData(sdata, index, minX1p3, minX2p2, minX3p3);
fillData(sdata, index, minX1p2, minX2p3, minX3p3);
} else if (sendDir == D3Q27System::BSE) {
fillData(sdata, index, maxX1m3, minX2p3, minX3p3);
fillData(sdata, index, maxX1m2, minX2p2, minX3p2);
fillData(sdata, index, maxX1m3, minX2p2, minX3p2);
fillData(sdata, index, maxX1m2, minX2p3, minX3p2);
fillData(sdata, index, maxX1m2, minX2p2, minX3p3);
fillData(sdata, index, maxX1m3, minX2p3, minX3p2);
fillData(sdata, index, maxX1m3, minX2p2, minX3p3);
fillData(sdata, index, maxX1m2, minX2p3, minX3p3);
} else if (sendDir == D3Q27System::BNW) {
fillData(sdata, index, minX1p3, maxX2m3, minX3p3);
fillData(sdata, index, minX1p2, maxX2m2, minX3p2);
fillData(sdata, index, minX1p3, maxX2m2, minX3p2);
fillData(sdata, index, minX1p2, maxX2m3, minX3p2);
fillData(sdata, index, minX1p2, maxX2m2, minX3p3);
fillData(sdata, index, minX1p3, maxX2m3, minX3p2);
fillData(sdata, index, minX1p3, maxX2m2, minX3p3);
fillData(sdata, index, minX1p2, maxX2m3, minX3p3);
} else if (sendDir == D3Q27System::BNE) {
fillData(sdata, index, maxX1m3, maxX2m3, minX3p3);
fillData(sdata, index, maxX1m2, maxX2m2, minX3p2);
fillData(sdata, index, maxX1m3, maxX2m2, minX3p2);
fillData(sdata, index, maxX1m2, maxX2m3, minX3p2);
fillData(sdata, index, maxX1m2, maxX2m2, minX3p3);
fillData(sdata, index, maxX1m3, maxX2m3, minX3p2);
fillData(sdata, index, maxX1m3, maxX2m2, minX3p3);
fillData(sdata, index, maxX1m2, maxX2m3, minX3p3);
} else
UB_THROW(UbException(UB_EXARGS, "unknown dir"));
}
////////////////////////////////////////////////////////////////////////
void ThreeDistributionsFullVectorConnector2::distributeReceiveVectors()
{
updatePointers();
distributeData();
}
////////////////////////////////////////////////////////////////////////
void ThreeDistributionsFullVectorConnector2::distributeData()
{
vector_type &rdata = receiver->getData();
int index = 0;
////////////////////////////////////////////////////////////
// relation between ghost layer and regular nodes
// maxX1m3 maxX1m2 ... minX1p2 minX1p3 - regular nodes
// minX1 minX1p1 ... maxX1m1 maxX1 - ghost layer
////////////////////////////////////////////////////////////
int minX1 = 0;
int minX1p1 = minX1 + 1;
int minX1p2 = minX1 + 2;
int minX1p3 = minX1 + 3;
int maxX1m1 = maxX1 - 1;
int maxX1m2 = maxX1 - 2;
int maxX1m3 = maxX1 - 3;
int minX2 = 0;
int minX2p1 = minX2 + 1;
int minX2p2 = minX2 + 2;
int minX2p3 = minX2 + 3;
int maxX2m1 = maxX2 - 1;
int maxX2m2 = maxX2 - 2;
int maxX2m3 = maxX2 - 3;
int minX3 = 0;
int minX3p1 = minX3 + 1;
int minX3p2 = minX3 + 2;
int minX3p3 = minX3 + 3;
int maxX3m1 = maxX3 - 1;
int maxX3m2 = maxX3 - 2;
int maxX3m3 = maxX3 - 3;
// EAST
if (sendDir == D3Q27System::W) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
distributeData(rdata, index, minX1, x2, x3);
distributeData(rdata, index, minX1p1, x2, x3);
}
}
}
// WEST
else if (sendDir == D3Q27System::E) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
distributeData(rdata, index, maxX1, x2, x3);
distributeData(rdata, index, maxX1m1, x2, x3);
}
}
}
// NORTH
else if (sendDir == D3Q27System::S) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
distributeData(rdata, index, x1, minX2, x3);
distributeData(rdata, index, x1, minX2p1, x3);
}
}
}
// SOUTH
else if (sendDir == D3Q27System::N) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
distributeData(rdata, index, x1, maxX2, x3);
distributeData(rdata, index, x1, maxX2m1, x3);
}
}
}
// TOP
else if (sendDir == D3Q27System::B) {
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
distributeData(rdata, index, x1, x2, minX3);
distributeData(rdata, index, x1, x2, minX3p1);
}
}
}
// BOTTOM
else if (sendDir == D3Q27System::T) {
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
distributeData(rdata, index, x1, x2, maxX3);
distributeData(rdata, index, x1, x2, maxX3m1);
}
}
}
// NORTHEAST
else if (sendDir == D3Q27System::SW) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
distributeData(rdata, index, minX1, minX2, x3);
distributeData(rdata, index, minX1p1, minX2p1, x3);
distributeData(rdata, index, minX1, minX2p1, x3);
distributeData(rdata, index, minX1p1, minX2, x3);
}
}
// NORTHWEST
else if (sendDir == D3Q27System::SE) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
distributeData(rdata, index, maxX1, minX2, x3);
distributeData(rdata, index, maxX1m1, minX2p1, x3);
distributeData(rdata, index, maxX1, minX2p1, x3);
distributeData(rdata, index, maxX1m1, minX2, x3);
}
}
// SOUTHWEST
else if (sendDir == D3Q27System::NE) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
distributeData(rdata, index, maxX1, maxX2, x3);
distributeData(rdata, index, maxX1m1, maxX2m1, x3);
distributeData(rdata, index, maxX1, maxX2m1, x3);
distributeData(rdata, index, maxX1m1, maxX2, x3);
}
}
// SOUTHEAST
else if (sendDir == D3Q27System::NW) {
for (int x3 = minX3p2; x3 <= maxX3m2; x3++) {
distributeData(rdata, index, minX1, maxX2, x3);
distributeData(rdata, index, minX1p1, maxX2m1, x3);
distributeData(rdata, index, minX1, maxX2m1, x3);
distributeData(rdata, index, minX1p1, maxX2, x3);
}
} else if (sendDir == D3Q27System::BW)
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
distributeData(rdata, index, minX1, x2, minX3);
distributeData(rdata, index, minX1p1, x2, minX3p1);
distributeData(rdata, index, minX1, x2, minX3p1);
distributeData(rdata, index, minX1p1, x2, minX3);
}
else if (sendDir == D3Q27System::TE)
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
distributeData(rdata, index, maxX1, x2, maxX3);
distributeData(rdata, index, maxX1m1, x2, maxX3m1);
distributeData(rdata, index, maxX1, x2, maxX3m1);
distributeData(rdata, index, maxX1m1, x2, maxX3);
}
else if (sendDir == D3Q27System::TW)
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
distributeData(rdata, index, minX1, x2, maxX3);
distributeData(rdata, index, minX1p1, x2, maxX3m1);
distributeData(rdata, index, minX1, x2, maxX3m1);
distributeData(rdata, index, minX1p1, x2, maxX3);
}
else if (sendDir == D3Q27System::BE)
for (int x2 = minX2p2; x2 <= maxX2m2; x2++) {
distributeData(rdata, index, maxX1, x2, minX3);
distributeData(rdata, index, maxX1m1, x2, minX3p1);
distributeData(rdata, index, maxX1, x2, minX3p1);
distributeData(rdata, index, maxX1m1, x2, minX3);
}
else if (sendDir == D3Q27System::BS)
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
distributeData(rdata, index, x1, minX2, minX3);
distributeData(rdata, index, x1, minX2p1, minX3p1);
distributeData(rdata, index, x1, minX2, minX3p1);
distributeData(rdata, index, x1, minX2p1, minX3);
}
else if (sendDir == D3Q27System::TN)
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
distributeData(rdata, index, x1, maxX2, maxX3);
distributeData(rdata, index, x1, maxX2m1, maxX3m1);
distributeData(rdata, index, x1, maxX2, maxX3m1);
distributeData(rdata, index, x1, maxX2m1, maxX3);
}
else if (sendDir == D3Q27System::TS)
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
distributeData(rdata, index, x1, minX2, maxX3);
distributeData(rdata, index, x1, minX2p1, maxX3m1);
distributeData(rdata, index, x1, minX2, maxX3m1);
distributeData(rdata, index, x1, minX2p1, maxX3);
}
else if (sendDir == D3Q27System::BN)
for (int x1 = minX1p2; x1 <= maxX1m2; x1++) {
distributeData(rdata, index, x1, maxX2, minX3);
distributeData(rdata, index, x1, maxX2m1, minX3p1);
distributeData(rdata, index, x1, maxX2, minX3p1);
distributeData(rdata, index, x1, maxX2m1, minX3);
}
else if (sendDir == D3Q27System::BNE) {
distributeData(rdata, index, maxX1, maxX2, minX3);
distributeData(rdata, index, maxX1m1, maxX2m1, minX3p1);
distributeData(rdata, index, maxX1, maxX2m1, minX3p1);
distributeData(rdata, index, maxX1m1, maxX2, minX3p1);
distributeData(rdata, index, maxX1m1, maxX2m1, minX3);
distributeData(rdata, index, maxX1, maxX2, minX3p1);
distributeData(rdata, index, maxX1, maxX2m1, minX3);
distributeData(rdata, index, maxX1m1, maxX2, minX3);
} else if (sendDir == D3Q27System::BNW) {
distributeData(rdata, index, minX1, maxX2, minX3);
distributeData(rdata, index, minX1p1, maxX2m1, minX3p1);
distributeData(rdata, index, minX1, maxX2m1, minX3p1);
distributeData(rdata, index, minX1p1, maxX2, minX3p1);
distributeData(rdata, index, minX1p1, maxX2m1, minX3);
distributeData(rdata, index, minX1, maxX2, minX3p1);
distributeData(rdata, index, minX1, maxX2m1, minX3);
distributeData(rdata, index, minX1p1, maxX2, minX3);
} else if (sendDir == D3Q27System::BSE) {
distributeData(rdata, index, maxX1, minX2, minX3);
distributeData(rdata, index, maxX1m1, minX2p1, minX3p1);
distributeData(rdata, index, maxX1, minX2p1, minX3p1);
distributeData(rdata, index, maxX1m1, minX2, minX3p1);
distributeData(rdata, index, maxX1m1, minX2p1, minX3);
distributeData(rdata, index, maxX1, minX2, minX3p1);
distributeData(rdata, index, maxX1, minX2p1, minX3);
distributeData(rdata, index, maxX1m1, minX2, minX3);
} else if (sendDir == D3Q27System::BSW) {
distributeData(rdata, index, minX1, minX2, minX3);
distributeData(rdata, index, minX1p1, minX2p1, minX3p1);
distributeData(rdata, index, minX1, minX2p1, minX3p1);
distributeData(rdata, index, minX1p1, minX2, minX3p1);
distributeData(rdata, index, minX1p1, minX2p1, minX3);
distributeData(rdata, index, minX1, minX2, minX3p1);
distributeData(rdata, index, minX1, minX2p1, minX3);
distributeData(rdata, index, minX1p1, minX2, minX3);
} else if (sendDir == D3Q27System::TNE) {
distributeData(rdata, index, maxX1, maxX2, maxX3);
distributeData(rdata, index, maxX1m1, maxX2m1, maxX3m1);
distributeData(rdata, index, maxX1, maxX2m1, maxX3m1);
distributeData(rdata, index, maxX1m1, maxX2, maxX3m1);
distributeData(rdata, index, maxX1m1, maxX2m1, maxX3);
distributeData(rdata, index, maxX1, maxX2, maxX3m1);
distributeData(rdata, index, maxX1, maxX2m1, maxX3);
distributeData(rdata, index, maxX1m1, maxX2, maxX3);
} else if (sendDir == D3Q27System::TNW) {
distributeData(rdata, index, minX1, maxX2, maxX3);
distributeData(rdata, index, minX1p1, maxX2m1, maxX3m1);
distributeData(rdata, index, minX1, maxX2m1, maxX3m1);
distributeData(rdata, index, minX1p1, maxX2, maxX3m1);
distributeData(rdata, index, minX1p1, maxX2m1, maxX3);
distributeData(rdata, index, minX1, maxX2, maxX3m1);
distributeData(rdata, index, minX1, maxX2m1, maxX3);
distributeData(rdata, index, minX1p1, maxX2, maxX3);
} else if (sendDir == D3Q27System::TSE) {
distributeData(rdata, index, maxX1, minX2, maxX3);
distributeData(rdata, index, maxX1m1, minX2p1, maxX3m1);
distributeData(rdata, index, maxX1, minX2p1, maxX3m1);
distributeData(rdata, index, maxX1m1, minX2, maxX3m1);
distributeData(rdata, index, maxX1m1, minX2p1, maxX3);
distributeData(rdata, index, maxX1, minX2, maxX3m1);
distributeData(rdata, index, maxX1, minX2p1, maxX3);
distributeData(rdata, index, maxX1m1, minX2, maxX3);
} else if (sendDir == D3Q27System::TSW) {
distributeData(rdata, index, minX1, minX2, maxX3);
distributeData(rdata, index, minX1p1, minX2p1, maxX3m1);
distributeData(rdata, index, minX1, minX2p1, maxX3m1);
distributeData(rdata, index, minX1p1, minX2, maxX3m1);
distributeData(rdata, index, minX1p1, minX2p1, maxX3);
distributeData(rdata, index, minX1, minX2, maxX3m1);
distributeData(rdata, index, minX1, minX2p1, maxX3);
distributeData(rdata, index, minX1p1, minX2, maxX3);
} else
UB_THROW(UbException(UB_EXARGS, "unknown dir"));
}
//////////////////////////////////////////////////////////////////////////
......@@ -41,6 +41,7 @@
#include "D3Q27EsoTwist3DSplittedVector.h"
#include "basics/container/CbArray3D.h"
#include "basics/container/CbArray4D.h"
#include "DataSet3D.h"
class EsoTwist3D;
class Block3D;
......@@ -61,6 +62,8 @@ public:
protected:
inline void updatePointers() override;
void fillData() override;
void distributeData() override;
inline void fillData(vector_type &sdata, int &index, int x1, int x2, int x3) override;
inline void distributeData(vector_type &rdata, int &index, int x1, int x2, int x3) override;
......@@ -83,6 +86,8 @@ private:
SPtr<EsoTwist3D> h2Dis;
SPtr<PressureFieldArray3D> pressure;
};
//////////////////////////////////////////////////////////////////////////
inline void ThreeDistributionsFullVectorConnector2::updatePointers()
......@@ -192,6 +197,8 @@ inline void ThreeDistributionsFullVectorConnector2::fillData(vector_type& sdata,
sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
sdata[index++] = (*this->zeroH2distributions)(x1, x2, x3);
sdata[index++] = (*this->pressure)(x1, x2, x3);
}
//////////////////////////////////////////////////////////////////////////
inline void ThreeDistributionsFullVectorConnector2::distributeData(vector_type& rdata, int& index, int x1, int x2, int x3)
......@@ -286,6 +293,8 @@ inline void ThreeDistributionsFullVectorConnector2::distributeData(vector_type&
(*this->nonLocalH2distributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = rdata[index++];
(*this->zeroH2distributions)(x1, x2, x3) = rdata[index++];
(*this->pressure)(x1, x2, x3) = rdata[index++];
}
......
......@@ -80,7 +80,7 @@ void InteractorsHelper::deleteSolidBlocks()
}
}
if (deleteBlocks)
if (interactors.size() > 0 && deleteBlocks)
updateGrid();
}
//////////////////////////////////////////////////////////////////////////
......
......@@ -49,6 +49,7 @@
#include "ThreeDistributionsFullDirectConnector.h"
#include "ThreeDistributionsFullDirectConnector2.h"
#include "ThreeDistributionsFullVectorConnector.h"
#include "ThreeDistributionsFullVectorConnector2.h"
#include <basics/transmitter/TbTransmitterLocal.h>
//! \brief A class sets connectors between blocks.
......@@ -159,6 +160,6 @@ void SetConnectorsBlockVisitor<T1, T2>::setRemoteConnectors(SPtr<Block3D> sblock
using OneDistributionSetConnectorsBlockVisitor = SetConnectorsBlockVisitor<OneDistributionFullDirectConnector, OneDistributionFullVectorConnector>;
using TwoDistributionsSetConnectorsBlockVisitor = SetConnectorsBlockVisitor<TwoDistributionsFullDirectConnector, TwoDistributionsFullVectorConnector>;
using ThreeDistributionsSetConnectorsBlockVisitor = SetConnectorsBlockVisitor<ThreeDistributionsFullDirectConnector, ThreeDistributionsFullVectorConnector>;
using ThreeDistributionsSetConnectorsBlockVisitor2 = SetConnectorsBlockVisitor<ThreeDistributionsFullDirectConnector2, ThreeDistributionsFullVectorConnector>;
using ThreeDistributionsSetConnectorsBlockVisitor2 = SetConnectorsBlockVisitor<ThreeDistributionsFullDirectConnector2, ThreeDistributionsFullVectorConnector2>;
#endif // SETCONNECTORSBLOCKVISITOR_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