diff --git a/source/Applications/bChannelA/bChannelA.cpp b/source/Applications/bChannelA/bChannelA.cpp index 3163b297b556def4c1dba04d992f0aeeffb616b9..8755b348e02f9cc7a942520088843fa0c9a64e50 100644 --- a/source/Applications/bChannelA/bChannelA.cpp +++ b/source/Applications/bChannelA/bChannelA.cpp @@ -288,15 +288,22 @@ void run(string configname) //////////////////////////////////////////// //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, MetisPartitioner::KWAY)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, MetisPartitioner::RECURSIVE)); + + //DEBUG METIS + ////////////////////////////////////////////////////////////////////////// + dynamic_pointer_cast<MetisPartitioningGridVisitor>(metisVisitor)->setNumberOfProcesses(2000); + grid->accept(metisVisitor); + WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); + ppblocks.process(0); + return; + ////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////// if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); InteractorsHelper intHelper(grid, metisVisitor); intHelper.addInteractor(addWallZminInt); intHelper.addInteractor(addWallZmaxInt); - - - intHelper.selectBlocks(); if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); ////////////////////////////////////// diff --git a/source/Applications/bChannelA/configBombadilpChannel.cfg b/source/Applications/bChannelA/configBombadilpChannel.cfg index 98edd84b2df0eded00291ad51be15b6fcd191699..077bdf3f0dd57bdda16b11b3dceda4465e1ebb76 100644 --- a/source/Applications/bChannelA/configBombadilpChannel.cfg +++ b/source/Applications/bChannelA/configBombadilpChannel.cfg @@ -2,7 +2,7 @@ #Simulation parameters for porous channel # -pathOut = d:/temp/BreugemChannelAnisotrop2 +pathOut = d:/temp/BreugemChannelAnisotrop3 pathGeo = g:/pChannelBA/cubes numOfThreads = 1 availMem = 14e9 @@ -13,7 +13,7 @@ logToFile = false boundingBox = 0 0 0 600 400 400 #boundingBox = 1 1 1 4 4 4 refineLevel = 0 -deltaXfine = 10 +deltaXfine = 1 #deltaXfine = 1 blocknx = 20 20 20 #blocknx = 4 4 4 diff --git a/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp b/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp index cd61f741feb329bc9111a9e9ea36769cccb3a90c..a996383ef3538c959a3a56ca21865eb9c7075ca8 100644 --- a/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp +++ b/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp @@ -5,6 +5,7 @@ #include "Block3D.h" #include "Grid3D.h" #include "Communicator.h" +#include "D3Q27System.h" using namespace std; @@ -226,7 +227,6 @@ void MetisPartitioningGridVisitor::buildMetisGraphLevelBased(SPtr<Grid3D> grid, const int vertexWeight = 1; int edges = 0; - const int edgeWeight= 1; for(SPtr<Block3D> block : tBlockID) { @@ -241,7 +241,7 @@ void MetisPartitioningGridVisitor::buildMetisGraphLevelBased(SPtr<Grid3D> grid, if (this->getPartitionCondition(neighBlock, level)) { edges++; - metis.adjwgt.push_back(edgeWeight); + metis.adjwgt.push_back(getEdgeWeight(dir)); metis.adjncy.push_back(neighBlock->getLocalID()); } } @@ -296,6 +296,23 @@ void MetisPartitioningGridVisitor::clear() parts.clear(); } ////////////////////////////////////////////////////////////////////////// +int MetisPartitioningGridVisitor::getEdgeWeight(int dir) +{ + using namespace D3Q27System; + if (dir <= B) + { + return 100; + } + else if (dir >= NE && dir <= TS) + { + return 10; + } + else if (dir >= TNE) + { + return 1; + } +} +////////////////////////////////////////////////////////////////////////// void MetisPartitioningGridVisitor::setNumberOfProcesses(int np) { numberOfProcesses = np; diff --git a/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h b/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h index 795478e3ae052a3e5a8493b72cf15151ac09e620..0cb2e05a7743f7880a0f64ef9c11b1201fae92de 100644 --- a/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h +++ b/source/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h @@ -46,6 +46,7 @@ protected: bool getPartitionCondition(SPtr<Block3D> block, PartLevel level); void distributePartitionData(SPtr<Grid3D> grid, PartLevel level); void clear(); + int getEdgeWeight(int dir); int nofSegments; int numOfDirs; std::vector<int> blockID;