From f56740f8f1f2dcd14a1dacaf67605ca73a0de318 Mon Sep 17 00:00:00 2001 From: "LEGOLAS\\lenz" <lenz@irmb.tu-bs.de> Date: Wed, 17 Oct 2018 10:55:01 +0200 Subject: [PATCH] enables Multi GPU Grid generation with solid and multiple levels --- .../grid/BoundaryConditions/Side.cpp | 4 +- src/GridGenerator/grid/Grid.h | 2 + .../grid/GridBuilder/MultipleGridBuilder.cpp | 6 +- src/GridGenerator/grid/GridImp.cu | 48 ++++-- src/GridGenerator/grid/GridImp.h | 2 + src/GridGenerator/grid/GridInterface.cu | 65 ++++++++ src/GridGenerator/grid/GridInterface.h | 4 +- src/GridGenerator/grid/GridMocks.h | 2 + .../SimulationFileWriter.cpp | 31 ++-- targets/apps/HULC/main.cpp | 153 +++++++++--------- 10 files changed, 218 insertions(+), 99 deletions(-) diff --git a/src/GridGenerator/grid/BoundaryConditions/Side.cpp b/src/GridGenerator/grid/BoundaryConditions/Side.cpp index 7c44a4f43..9955efbd0 100644 --- a/src/GridGenerator/grid/BoundaryConditions/Side.cpp +++ b/src/GridGenerator/grid/BoundaryConditions/Side.cpp @@ -9,9 +9,9 @@ void Side::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::string coord, real constant, real startInner, real endInner, real startOuter, real endOuter) { - for (real v1 = startInner; v1 <= endInner; v1 += grid->getDelta()) + for (real v2 = startOuter; v2 <= endOuter; v2 += grid->getDelta()) { - for (real v2 = startOuter; v2 <= endOuter; v2 += grid->getDelta()) + for (real v1 = startInner; v1 <= endInner; v1 += grid->getDelta()) { const uint index = getIndex(grid, coord, constant, v1, v2); diff --git a/src/GridGenerator/grid/Grid.h b/src/GridGenerator/grid/Grid.h index b5e42562a..a4cc4ae78 100644 --- a/src/GridGenerator/grid/Grid.h +++ b/src/GridGenerator/grid/Grid.h @@ -81,6 +81,8 @@ public: HOST virtual void findGridInterface(SPtr<Grid> grid, LbmOrGks lbmOrGks) = 0; + HOST virtual void repairGridInterfaceOnMultiGPU(SPtr<Grid> fineGrid) = 0; + HOST virtual void limitToSubDomain(SPtr<BoundingBox> subDomainBox) = 0; HOST virtual void enableFindSolidBoundaryNodes() = 0; diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp index 3786bcfb0..8dc882f4f 100644 --- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp +++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp @@ -471,7 +471,6 @@ void MultipleGridBuilder::buildGrids( LbmOrGks lbmOrGks, bool enableThinWalls ) *logging::out << logging::Logger::INFO_INTERMEDIATE << "Done with Q Computation\n"; } - for (size_t i = 0; i < grids.size() - 1; i++) grids[i]->findGridInterface(grids[i + 1], lbmOrGks); @@ -479,6 +478,9 @@ void MultipleGridBuilder::buildGrids( LbmOrGks lbmOrGks, bool enableThinWalls ) for (size_t i = 0; i < grids.size(); i++) grids[i]->limitToSubDomain( this->subDomainBox ); + for (size_t i = 0; i < grids.size() - 1; i++) + grids[i]->repairGridInterfaceOnMultiGPU(grids[i + 1]); + if (lbmOrGks == LBM) { for (size_t i = 0; i < grids.size() - 1; i++) grids[i]->findSparseIndices(grids[i + 1]); @@ -524,10 +526,12 @@ void MultipleGridBuilder::writeGridsToVtk(const std::string& path) const ss << path << level << ".vtk"; GridVTKWriter::writeGridToVTKXML(grids[level], ss.str()); + //if( level != 0 ) // GridVTKWriter::writeInterpolationCellsToVTKXML(grids[level], grids[level-1], ss.str() + ".InterpolationCells"); //else // GridVTKWriter::writeInterpolationCellsToVTKXML(grids[level], nullptr , ss.str() + ".InterpolationCells"); + //GridVTKWriter::writeSparseGridToVTK(grids[level], ss.str()); } } diff --git a/src/GridGenerator/grid/GridImp.cu b/src/GridGenerator/grid/GridImp.cu index 4b79998e5..57450a7ba 100644 --- a/src/GridGenerator/grid/GridImp.cu +++ b/src/GridGenerator/grid/GridImp.cu @@ -833,7 +833,7 @@ HOSTDEVICE void GridImp::setNeighborIndices(uint index) this->setStopperNeighborCoords(index); return; } - + if (this->sparseIndices[index] == -1) return; @@ -975,6 +975,11 @@ HOST void GridImp::findGridInterface(SPtr<Grid> finerGrid, LbmOrGks lbmOrGks) gridStrategy->findGridInterface(shared_from_this(), std::static_pointer_cast<GridImp>(finerGrid), lbmOrGks); } +HOSTDEVICE void GridImp::repairGridInterfaceOnMultiGPU(SPtr<Grid> fineGrid) +{ + this->gridInterface->repairGridInterfaceOnMultiGPU( shared_from_this(), std::static_pointer_cast<GridImp>(fineGrid) ); +} + HOST void GridImp::limitToSubDomain(SPtr<BoundingBox> subDomainBox) { for( uint index = 0; index < this->size; index++ ){ @@ -982,13 +987,28 @@ HOST void GridImp::limitToSubDomain(SPtr<BoundingBox> subDomainBox) real x, y, z; this->transIndexToCoords( index, x, y, z ); - BoundingBox tmpSubDomainBox = *subDomainBox; + { + BoundingBox tmpSubDomainBox = *subDomainBox; + + // one layer for receive nodes and one for stoppers + tmpSubDomainBox.extend(this->delta); + + if (!tmpSubDomainBox.isInside(x, y, z)) + this->setFieldEntry(index, STOPPER_OUT_OF_GRID_BOUNDARY); + } + + { + BoundingBox tmpSubDomainBox = *subDomainBox; - tmpSubDomainBox.extend(this->delta); + // one layer for receive nodes and one for stoppers + tmpSubDomainBox.extend(2.0 * this->delta); - if( !tmpSubDomainBox.isInside(x,y,z) ) - this->setFieldEntry(index, INVALID_OUT_OF_GRID); + if (!tmpSubDomainBox.isInside(x, y, z)) + this->setFieldEntry(index, INVALID_OUT_OF_GRID); + } } + + //this->gridStrategy->findEndOfGridStopperNodes(shared_from_this()); } HOSTDEVICE void GridImp::findGridInterfaceCF(uint index, GridImp& finerGrid, LbmOrGks lbmOrGks) @@ -1343,7 +1363,11 @@ void GridImp::findCommunicationIndices(int direction, SPtr<BoundingBox> subDomai if( this->getFieldEntry(index) == INVALID_OUT_OF_GRID || this->getFieldEntry(index) == INVALID_SOLID || - this->getFieldEntry(index) == INVALID_COARSE_UNDER_FINE ) continue; + this->getFieldEntry(index) == INVALID_COARSE_UNDER_FINE || + this->getFieldEntry(index) == STOPPER_SOLID || + this->getFieldEntry(index) == STOPPER_OUT_OF_GRID || + this->getFieldEntry(index) == STOPPER_OUT_OF_GRID_BOUNDARY || + this->getFieldEntry(index) == STOPPER_COARSE_UNDER_FINE ) continue; if( direction == CommunicationDirections::MX ) findCommunicationIndex( index, x, subDomainBox->minX, direction); if( direction == CommunicationDirections::PX ) findCommunicationIndex( index, x, subDomainBox->maxX, direction); @@ -1361,12 +1385,18 @@ void GridImp::findCommunicationIndex( uint index, real coordinate, real limit, i if( vf::Math::equal( coordinate, limit + s * 0.5 * this->delta, 0.01 * this->delta ) ){ this->communicationIndices[direction].receiveIndices.push_back(index); - this->setFieldEntry(index, MULTI_GPU_RECIEVE); + //this->setFieldEntry(index, MULTI_GPU_RECIEVE); + //this->setFieldEntry(index, STOPPER_OUT_OF_GRID_BOUNDARY); } if( vf::Math::equal( coordinate, limit - s * 0.5 * this->delta, 0.01 * this->delta ) ){ this->communicationIndices[direction].sendIndices.push_back(index); - this->setFieldEntry(index, MULTI_GPU_SEND); - } + //this->setFieldEntry(index, MULTI_GPU_SEND); + } + + //if( vf::Math::equal( coordinate, limit + s * 1.5 * this->delta, 0.01 * this->delta ) ){ + // //this->setFieldEntry(index, MULTI_GPU_RECIEVE); + // this->setFieldEntry(index, STOPPER_OUT_OF_GRID_BOUNDARY); + //} } uint GridImp::getNumberOfSendNodes(int direction) diff --git a/src/GridGenerator/grid/GridImp.h b/src/GridGenerator/grid/GridImp.h index caba6d8f0..8a78aeaf3 100644 --- a/src/GridGenerator/grid/GridImp.h +++ b/src/GridGenerator/grid/GridImp.h @@ -107,6 +107,8 @@ public: HOST virtual void findGridInterface(SPtr<Grid> grid, LbmOrGks lbmOrGks) override; + HOST void repairGridInterfaceOnMultiGPU(SPtr<Grid> fineGrid) override; + HOST virtual void limitToSubDomain(SPtr<BoundingBox> subDomainBox) override; HOST void freeMemory() override; diff --git a/src/GridGenerator/grid/GridInterface.cu b/src/GridGenerator/grid/GridInterface.cu index a1ebb2bd3..732203eee 100644 --- a/src/GridGenerator/grid/GridInterface.cu +++ b/src/GridGenerator/grid/GridInterface.cu @@ -240,6 +240,71 @@ void GridInterface::findForGridInterfaceSparseIndexFC(GridImp* coarseGrid, GridI findSparseIndex(fc.fine, fineGrid, index); } +HOST void VF_PUBLIC GridInterface::repairGridInterfaceOnMultiGPU(SPtr<GridImp> coarseGrid, SPtr<GridImp> fineGrid) +{ + { + std::vector<uint> tmpCFC; + std::vector<uint> tmpCFF; + std::vector<uint> tmpCFOffset; + + for (uint index = 0; index < cf.numberOfEntries; index++) { + + real x, y, z; + coarseGrid->transIndexToCoords(this->cf.coarse[index], x, y, z); + if (coarseGrid->cellContainsOnly(Cell(x, y, z, coarseGrid->getDelta()), FLUID_CFC)) { + tmpCFC.push_back (this->cf.coarse[index]); + tmpCFF.push_back (this->cf.fine[index]); + tmpCFOffset.push_back(this->cf.offset[index]); + } + } + + delete[] cf.coarse; + delete[] cf.fine; + delete[] cf.offset; + + cf.numberOfEntries = tmpCFC.size(); + + cf.coarse = new uint[cf.numberOfEntries]; + cf.fine = new uint[cf.numberOfEntries]; + cf.offset = new uint[cf.numberOfEntries]; + + memcpy(cf.coarse, tmpCFC.data() , sizeof(uint)*cf.numberOfEntries); + memcpy(cf.fine , tmpCFF.data() , sizeof(uint)*cf.numberOfEntries); + memcpy(cf.offset, tmpCFOffset.data(), sizeof(uint)*cf.numberOfEntries); + } + + { + std::vector<uint> tmpFCF; + std::vector<uint> tmpFCC; + std::vector<uint> tmpFCOffset; + + for (uint index = 0; index < fc.numberOfEntries; index++) { + + real x, y, z; + fineGrid->transIndexToCoords(this->fc.fine[index], x, y, z); + if (fineGrid->cellContainsOnly(Cell(x, y, z, fineGrid->getDelta()), FLUID_FCF)) { + tmpFCF.push_back (this->fc.fine[index]); + tmpFCC.push_back (this->fc.coarse[index]); + tmpFCOffset.push_back(this->fc.offset[index]); + } + } + + delete[] fc.fine; + delete[] fc.coarse; + delete[] fc.offset; + + fc.numberOfEntries = tmpFCC.size(); + + fc.fine = new uint[fc.numberOfEntries]; + fc.coarse = new uint[fc.numberOfEntries]; + fc.offset = new uint[fc.numberOfEntries]; + + memcpy(fc.fine , tmpFCF.data() , sizeof(uint)*fc.numberOfEntries); + memcpy(fc.coarse, tmpFCC.data() , sizeof(uint)*fc.numberOfEntries); + memcpy(fc.offset, tmpFCOffset.data(), sizeof(uint)*fc.numberOfEntries); + } +} + void GridInterface::findSparseIndex(uint* indices, GridImp* grid, uint index) { const uint matrixIndex = indices[index]; diff --git a/src/GridGenerator/grid/GridInterface.h b/src/GridGenerator/grid/GridInterface.h index ad6220e08..8dfd294f6 100644 --- a/src/GridGenerator/grid/GridInterface.h +++ b/src/GridGenerator/grid/GridInterface.h @@ -5,7 +5,7 @@ #include "VirtualFluidsDefinitions.h" #include "utilities/cuda/cudaDefines.h" - +#include "core/PointerDefinitions.h" class GridImp; @@ -27,6 +27,8 @@ public: HOSTDEVICE void VF_PUBLIC findForGridInterfaceSparseIndexCF(GridImp* coarseGrid, GridImp* fineGrid, uint index); HOSTDEVICE void VF_PUBLIC findForGridInterfaceSparseIndexFC(GridImp* coarseGrid, GridImp* fineGrid, uint index); + HOST void VF_PUBLIC repairGridInterfaceOnMultiGPU(SPtr<GridImp> coarseGrid, SPtr<GridImp> fineGrid); + HOSTDEVICE void VF_PUBLIC print() const; struct Interface diff --git a/src/GridGenerator/grid/GridMocks.h b/src/GridGenerator/grid/GridMocks.h index 0b336eaa0..0ab49bcfa 100644 --- a/src/GridGenerator/grid/GridMocks.h +++ b/src/GridGenerator/grid/GridMocks.h @@ -62,6 +62,8 @@ public: virtual void findGridInterface(SPtr<Grid> grid, LbmOrGks lbmOrGks) override {} + virtual void repairGridInterfaceOnMultiGPU(SPtr<Grid> fineGrid) override {} + virtual void limitToSubDomain(SPtr<BoundingBox> subDomainBox) override {} virtual void enableFindSolidBoundaryNodes() override {} diff --git a/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp b/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp index 5b4481df6..a03156066 100644 --- a/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp +++ b/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp @@ -492,25 +492,26 @@ void SimulationFileWriter::writeBoundaryQsFile(SPtr<GridBuilder> builder) auto bc = builder->getBoundaryCondition( sides[side], level ); - if( !bc ){ - *valueStreams[side] << "noSlip\n" << "0\n" << "0\n"; - *qStreams[side] << "0\n" << "0\n"; - continue; - } - if( level == 0 ){ - if( bc->getType() == BC_PRESSURE ) *valueStreams[side] << "pressure\n"; - if( bc->getType() == BC_VELOCITY ) *valueStreams[side] << "velocity\n"; - if( bc->getType() == BC_SOLID ) *valueStreams[side] << "noSlip\n"; - if( bc->getType() == BC_SLIP ) *valueStreams[side] << "slip\n"; - if( bc->getType() == BC_OUTFLOW ) *valueStreams[side] << "outflow\n"; + if ( !bc ) *valueStreams[side] << "noSlip\n"; + else if( bc->getType() == BC_PRESSURE ) *valueStreams[side] << "pressure\n"; + else if( bc->getType() == BC_VELOCITY ) *valueStreams[side] << "velocity\n"; + else if( bc->getType() == BC_SOLID ) *valueStreams[side] << "noSlip\n"; + else if( bc->getType() == BC_SLIP ) *valueStreams[side] << "slip\n"; + else if( bc->getType() == BC_OUTFLOW ) *valueStreams[side] << "outflow\n"; *valueStreams[side] << builder->getNumberOfGridLevels() - 1 << "\n"; *qStreams[side] << builder->getNumberOfGridLevels() - 1 << "\n"; } - writeBoundaryShort( builder->getGrid(level), bc, side ); + if( !bc ){ + *valueStreams[side] << "0\n"; + *qStreams[side] << "0\n"; + } + else{ + writeBoundaryShort( builder->getGrid(level), bc, side ); + } } } } @@ -638,10 +639,12 @@ void SimulationFileWriter::writeCommunicationFiles(SPtr<GridBuilder> builder) receiveFiles[direction] << numberOfReceiveNodes << "\n"; for( uint index = 0; index < numberOfSendNodes; index++ ) - sendFiles[direction] << builder->getGrid(level)->getSendIndex (direction, index) << "\n"; + // + 1 for numbering shift between GridGenerator and VF_GPU + sendFiles[direction] << builder->getGrid(level)->getSparseIndex( builder->getGrid(level)->getSendIndex (direction, index) ) + 1 << "\n"; for( uint index = 0; index < numberOfReceiveNodes; index++ ) - receiveFiles[direction] << builder->getGrid(level)->getReceiveIndex(direction, index) << "\n"; + // + 1 for numbering shift between GridGenerator and VF_GPU + receiveFiles[direction] << builder->getGrid(level)->getSparseIndex( builder->getGrid(level)->getReceiveIndex(direction, index) ) + 1 << "\n"; } } diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp index 273670aa4..f4e8a50c5 100644 --- a/targets/apps/HULC/main.cpp +++ b/targets/apps/HULC/main.cpp @@ -260,8 +260,8 @@ void setParameters(std::shared_ptr<Parameter> para, std::unique_ptr<input::Input void multipleLevel(const std::string& configPath) { - //std::ofstream logFile( "C:/Users/lenz/Desktop/Work/gridGenerator/grid/gridGeneratorLog.txt" ); - std::ofstream logFile( "grid/gridGeneratorLog.txt" ); + std::ofstream logFile( "C:/Users/lenz/Desktop/Work/gridGenerator/grid/gridGeneratorLog.txt" ); + //std::ofstream logFile( "grid/gridGeneratorLog.txt" ); logging::Logger::addStream(&logFile); logging::Logger::addStream(&std::cout); @@ -328,23 +328,25 @@ void multipleLevel(const std::string& configPath) // DLC - Golf ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //real dx = 0.2; + //real dx = 5.0/30.0;//0.2; //real vx = 0.05; - //real z0 = 0.265+0.5*dx; + //real z0 = 0.265; //std::vector<uint> ignorePatches = { 152, 153, 154 }; - //TriangularMesh* VW370_SERIE_STL = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/VW370_SERIE.stl", ignorePatches); - // - ////TriangularMesh* DrivAerRefBoxSTL = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DrivAer_REF_BOX_Adrea.stl"); + ////TriangularMesh* VW370_SERIE_STL = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/VW370_SERIE.stl", ignorePatches); - //TriangularMesh* DLC_RefBox = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DLC_RefBox.stl"); + ////TriangularMesh* DLC_RefBox = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DLC_RefBox.stl"); - //TriangularMesh* DLC_RefBox_1 = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DLC_RefBox_withWake/DLC_RefBox_withWake_4m.stl"); - //TriangularMesh* DLC_RefBox_2 = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DLC_RefBox_withWake/DLC_RefBox_withWake_3m.stl"); - //TriangularMesh* DLC_RefBox_3 = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DLC_RefBox_withWake/DLC_RefBox_withWake_2m.stl"); - //TriangularMesh* DLC_RefBox_4 = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DLC_RefBox_withWake/DLC_RefBox_withWake_1m.stl"); + //////TriangularMesh* DLC_RefBox_1 = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DLC_RefBox_withWake/DLC_RefBox_withWake_4m.stl"); + //////TriangularMesh* DLC_RefBox_2 = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DLC_RefBox_withWake/DLC_RefBox_withWake_3m.stl"); + //////TriangularMesh* DLC_RefBox_3 = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DLC_RefBox_withWake/DLC_RefBox_withWake_2m.stl"); + ////TriangularMesh* DLC_RefBox_4 = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DLC_RefBox_withWake/DLC_RefBox_withWake_1m.stl"); + + //TriangularMesh* VW370_SERIE_STL = TriangularMesh::make("stl/VW370_SERIE.stl", ignorePatches); + //TriangularMesh* DLC_RefBox = TriangularMesh::make("stl/DLC_RefBox.lnx.stl"); + //TriangularMesh* DLC_RefBox_4 = TriangularMesh::make("stl/DLC_RefBox_withWake/DLC_RefBox_withWake_1m.lnx.stl"); //gridBuilder->addCoarseGrid(- 5.0, -5.0, 0.0 - z0, // 15.0, 5.0, 5.0 - z0, dx); @@ -366,6 +368,10 @@ void multipleLevel(const std::string& configPath) //gridBuilder->addGeometry(VW370_SERIE_STL); + //gridBuilder->setPeriodicBoundaryCondition(false, false, false); + + //gridBuilder->buildGrids(LBM, true); // buildGrids() has to be called before setting the BCs!!!! + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Wall Mounted Cube ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -488,37 +494,37 @@ void multipleLevel(const std::string& configPath) // Testing Multi GPU grids ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - const uint generatePart = 2; + const uint generatePart = 0; std::ofstream logFile2; - //if( generatePart == 1 ) - // logFile2.open( "C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_1/gridGeneratorLog.txt" ); - // - //if( generatePart == 2 ) - // logFile2.open( "C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_2/gridGeneratorLog.txt" ); + if( generatePart == 0 ) + logFile2.open( "C:/Users/lenz/Desktop/Work/gridGenerator/grid/0/gridGeneratorLog.txt" ); + + if( generatePart == 1 ) + logFile2.open( "C:/Users/lenz/Desktop/Work/gridGenerator/grid/1/gridGeneratorLog.txt" ); logging::Logger::addStream(&logFile2); real dx = 1.0 / 10.0; real vx = 0.01; - //TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/ShpereNotOptimal.stl"); - TriangularMesh* triangularMesh = TriangularMesh::make("stl/ShpereNotOptimal.lnx.stl"); + TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/ShpereNotOptimal.stl"); + //TriangularMesh* triangularMesh = TriangularMesh::make("stl/ShpereNotOptimal.lnx.stl"); // all - gridBuilder->addCoarseGrid(-2, -2, -2, - 4, 2, 2, dx); + //gridBuilder->addCoarseGrid(-2, -2, -2, + // 4, 2, 2, dx); real overlap = 10.0 * dx; - //if( generatePart == 1 ) - // gridBuilder->addCoarseGrid(-2.0 , -2.0, -2.0, - // 0.5 + overlap, 2.0, 2.0, dx); + if( generatePart == 0 ) + gridBuilder->addCoarseGrid(-2.0 , -2.0, -2.0, + 0.5 + overlap, 2.0, 2.0, dx); - //if( generatePart == 2 ) - // gridBuilder->addCoarseGrid( 0.5 - overlap, -2.0, -2.0, - // 4.0 , 2.0, 2.0, dx); + if( generatePart == 1 ) + gridBuilder->addCoarseGrid( 0.5 - overlap, -2.0, -2.0, + 4.0 , 2.0, 2.0, dx); gridBuilder->setNumberOfLayers(10,8); @@ -526,29 +532,29 @@ void multipleLevel(const std::string& configPath) gridBuilder->addGeometry(triangularMesh); - //if( generatePart == 1 ) - // gridBuilder->setSubDomainBox( std::make_shared<BoundingBox>( -2.0, 0.5, - // -2.0, 2.0, - // -2.0, 2.0 ) ); - // - //if( generatePart == 2 ) - // gridBuilder->setSubDomainBox( std::make_shared<BoundingBox>( 0.5, 4.0, - // -2.0, 2.0, - // -2.0, 2.0 ) ); + if( generatePart == 0 ) + gridBuilder->setSubDomainBox( std::make_shared<BoundingBox>( -2.0, 0.5, + -2.0, 2.0, + -2.0, 2.0 ) ); + + if( generatePart == 1 ) + gridBuilder->setSubDomainBox( std::make_shared<BoundingBox>( 0.5, 4.0, + -2.0, 2.0, + -2.0, 2.0 ) ); gridBuilder->setPeriodicBoundaryCondition(false, false, false); gridBuilder->buildGrids(LBM, true); // buildGrids() has to be called before setting the BCs!!!! - //if( generatePart == 1 ){ - // gridBuilder->findCommunicationIndices(CommunicationDirections::PX); - // gridBuilder->setCommunicationProcess(CommunicationDirections::PX, 1); - //} - // - //if( generatePart == 2 ){ - // gridBuilder->findCommunicationIndices(CommunicationDirections::MX); - // gridBuilder->setCommunicationProcess(CommunicationDirections::MX, 0); - //} + if( generatePart == 0 ){ + gridBuilder->findCommunicationIndices(CommunicationDirections::PX); + gridBuilder->setCommunicationProcess(CommunicationDirections::PX, 1); + } + + if( generatePart == 1 ){ + gridBuilder->findCommunicationIndices(CommunicationDirections::MX); + gridBuilder->setCommunicationProcess(CommunicationDirections::MX, 0); + } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // other tests @@ -575,22 +581,23 @@ void multipleLevel(const std::string& configPath) //BCs //gridBuilder->setVelocityBoundaryCondition(SideType::PX, 0.0, 0.0, 0.0); //gridBuilder->setVelocityBoundaryCondition(SideType::MX, 0.0, 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::PY, vx , 0.0, 0.0); gridBuilder->setVelocityBoundaryCondition(SideType::MY, vx , 0.0, 0.0); gridBuilder->setVelocityBoundaryCondition(SideType::PZ, vx , 0.0, 0.0); gridBuilder->setVelocityBoundaryCondition(SideType::MZ, vx , 0.0, 0.0); - gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0); + //gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); + //gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0); + if (generatePart == 0) { + gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0); + } + if (generatePart == 1) { + gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); + } - //if (generatePart == 1) { - // gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0); - //} - //if (generatePart == 2) { - // gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); - //} + gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0); //////////////////////////////////////////////////////////////////////////// @@ -648,22 +655,22 @@ void multipleLevel(const std::string& configPath) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //if (generatePart == 1) { - // gridBuilder->writeGridsToVtk("C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_1/Test_"); - // gridBuilder->writeArrows ("C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_1/Test_Arrow"); - //} - //if (generatePart == 2) { - // gridBuilder->writeGridsToVtk("C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_2/Test_"); - // gridBuilder->writeArrows ("C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_2/Test_Arrow"); - //} + if (generatePart == 0) { + gridBuilder->writeGridsToVtk("C:/Users/lenz/Desktop/Work/gridGenerator/grid/0/Test_"); + gridBuilder->writeArrows ("C:/Users/lenz/Desktop/Work/gridGenerator/grid/0/Test_Arrow"); + } + if (generatePart == 1) { + gridBuilder->writeGridsToVtk("C:/Users/lenz/Desktop/Work/gridGenerator/grid/1/Test_"); + gridBuilder->writeArrows ("C:/Users/lenz/Desktop/Work/gridGenerator/grid/1/Test_Arrow"); + } //gridBuilder->writeGridsToVtk("M:/TestGridGeneration/results/ConcaveTest_"); - //gridBuilder->writeGridsToVtk("C:/Users/lenz/Desktop/Work/gridGenerator/grid/Test_"); - gridBuilder->writeGridsToVtk("grid/Test_"); - //gridBuilder->writeGridsToVtk("M:/TestGridGeneration/results/CylinderTest_"); + //gridBuilder->writeGridsToVtk("C:/Users/lenz/Desktop/Work/gridGenerator/grid/Test_"); //gridBuilder->writeArrows("C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_2/Test_Arrow"); - gridBuilder->writeArrows("grid/Test_Arrow"); + + //gridBuilder->writeGridsToVtk("grid/Test_"); + //gridBuilder->writeArrows("grid/Test_Arrow"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -761,12 +768,14 @@ void multipleLevel(const std::string& configPath) //SimulationFileWriter::write("D:/GRIDGENERATION/files/", gridBuilder, FILEFORMAT::ASCII); //SimulationFileWriter::write("C:/Users/lenz/Desktop/Work/gridGenerator/grid/", gridBuilder, FILEFORMAT::ASCII); - SimulationFileWriter::write("grid/", gridBuilder, FILEFORMAT::ASCII); + //SimulationFileWriter::write("grid/", gridBuilder, FILEFORMAT::ASCII); + + if (generatePart == 0) + SimulationFileWriter::write("C:/Users/lenz/Desktop/Work/gridGenerator/grid/0/", gridBuilder, FILEFORMAT::ASCII); + if (generatePart == 1) + SimulationFileWriter::write("C:/Users/lenz/Desktop/Work/gridGenerator/grid/1/", gridBuilder, FILEFORMAT::ASCII); - //if (generatePart == 1) - // SimulationFileWriter::write("C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_1/", gridBuilder, FILEFORMAT::ASCII); - //if (generatePart == 2) - // SimulationFileWriter::write("C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_2/", gridBuilder, FILEFORMAT::ASCII); + return; gridGenerator = GridGenerator::make(gridBuilder, para); } -- GitLab