From ba5db3f2010ed6f7a839ef26244b623521bea84c Mon Sep 17 00:00:00 2001 From: "LEGOLAS\\lenz" <lenz@irmb.tu-bs.de> Date: Thu, 11 Oct 2018 14:43:45 +0200 Subject: [PATCH] implements file output for comuunication nodes --- src/GridGenerator/grid/Grid.h | 6 + .../grid/GridBuilder/GridBuilder.h | 2 + .../grid/GridBuilder/LevelGridBuilder.cpp | 18 +++ .../grid/GridBuilder/LevelGridBuilder.h | 7 +- .../grid/GridBuilder/MultipleGridBuilder.cpp | 4 + src/GridGenerator/grid/GridImp.cu | 35 +++-- src/GridGenerator/grid/GridImp.h | 18 +-- src/GridGenerator/grid/GridMocks.h | 6 + .../SimulationFileWriter.cpp | 89 ++++++++++-- .../SimulationFileWriter.h | 9 +- src/GridGenerator/utilities/communication.h | 15 ++ src/GridGenerator/utilities/package.include | 0 targets/apps/HULC/main.cpp | 135 +++++++++++------- 13 files changed, 256 insertions(+), 88 deletions(-) create mode 100644 src/GridGenerator/utilities/communication.h create mode 100644 src/GridGenerator/utilities/package.include diff --git a/src/GridGenerator/grid/Grid.h b/src/GridGenerator/grid/Grid.h index 5e3ac90db..b5e42562a 100644 --- a/src/GridGenerator/grid/Grid.h +++ b/src/GridGenerator/grid/Grid.h @@ -124,6 +124,12 @@ public: HOST virtual void setNumberOfLayers( uint numberOfLayers ) = 0; virtual void findCommunicationIndices(int direction, SPtr<BoundingBox> subDomainBox) = 0; + + virtual uint getNumberOfSendNodes(int direction) = 0; + virtual uint getNumberOfReceiveNodes(int direction) = 0; + + virtual uint getSendIndex(int direction, uint index) = 0; + virtual uint getReceiveIndex(int direction, uint index) = 0; }; #endif diff --git a/src/GridGenerator/grid/GridBuilder/GridBuilder.h b/src/GridGenerator/grid/GridBuilder/GridBuilder.h index a24139138..3dc8d7687 100644 --- a/src/GridGenerator/grid/GridBuilder/GridBuilder.h +++ b/src/GridGenerator/grid/GridBuilder/GridBuilder.h @@ -75,6 +75,8 @@ public: virtual bool hasGeometryValues() const = 0; virtual void getGeometryValues(real* vx, real* vy, real* vz, int level) const = 0; + virtual uint getCommunicationProcess(int direction) = 0; + virtual SPtr<BoundaryCondition> getBoundaryCondition( SideType side, uint level ) const = 0; virtual SPtr<GeometryBoundaryCondition> getGeometryBoundaryCondition( uint level ) const = 0; diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp index e9a5da532..96836863e 100644 --- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp +++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp @@ -32,12 +32,20 @@ #include <GridGenerator/io/QLineWriter.h> +#include "utilities/communication.h" + #define GEOFLUID 19 #define GEOSOLID 16 LevelGridBuilder::LevelGridBuilder(Device device, const std::string& d3qxx) : device(device), d3qxx(d3qxx) { + this->communicationProcesses[CommunicationDirections::MX] = INVALID_INDEX; + this->communicationProcesses[CommunicationDirections::PX] = INVALID_INDEX; + this->communicationProcesses[CommunicationDirections::MY] = INVALID_INDEX; + this->communicationProcesses[CommunicationDirections::PY] = INVALID_INDEX; + this->communicationProcesses[CommunicationDirections::MZ] = INVALID_INDEX; + this->communicationProcesses[CommunicationDirections::PZ] = INVALID_INDEX; } std::shared_ptr<LevelGridBuilder> LevelGridBuilder::makeShared(Device device, const std::string& d3qxx) @@ -126,6 +134,16 @@ void LevelGridBuilder::setNoSlipBoundaryCondition(SideType sideType) } } +VF_PUBLIC void LevelGridBuilder::setCommunicationProcess(int direction, uint process) +{ + this->communicationProcesses[direction] = process; +} + +VF_PUBLIC uint LevelGridBuilder::getCommunicationProcess(int direction) +{ + return this->communicationProcesses[direction]; +} + void LevelGridBuilder::copyDataFromGpu() diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h index 0e895abb6..715f7e113 100644 --- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h +++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h @@ -6,7 +6,7 @@ #include <vector> #include <string> #include <memory> -#include <map> +#include <array> #include "GridBuilder.h" #include "grid/GridInterface.h" @@ -48,6 +48,9 @@ public: VF_PUBLIC void setPeriodicBoundaryCondition(bool periodic_X, bool periodic_Y, bool periodic_Z); VF_PUBLIC void setNoSlipBoundaryCondition(SideType sideType); + VF_PUBLIC void setCommunicationProcess(int direction, uint process); + + VF_PUBLIC uint getCommunicationProcess(int direction) override; VF_PUBLIC virtual std::shared_ptr<Grid> getGrid(int level, int box); @@ -99,6 +102,8 @@ protected: std::vector<std::shared_ptr<Grid> > grids; std::vector<SPtr<BoundaryConditions> > boundaryConditions; + std::array<uint, 6> communicationProcesses; + void checkLevel(int level); protected: diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp index d48473539..3786bcfb0 100644 --- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp +++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp @@ -507,9 +507,13 @@ void MultipleGridBuilder::emitGridIsNotInCoarseGridWarning() void MultipleGridBuilder::findCommunicationIndices(int direction) { + *logging::out << logging::Logger::INFO_HIGH << "Start findCommunicationIndices()\n"; + if( this->subDomainBox ) for (size_t i = 0; i < grids.size(); i++) grids[i]->findCommunicationIndices(direction, this->subDomainBox); + + *logging::out << logging::Logger::INFO_HIGH << "Done with findCommunicationIndices()\n"; } void MultipleGridBuilder::writeGridsToVtk(const std::string& path) const diff --git a/src/GridGenerator/grid/GridImp.cu b/src/GridGenerator/grid/GridImp.cu index 738205c59..4b79998e5 100644 --- a/src/GridGenerator/grid/GridImp.cu +++ b/src/GridGenerator/grid/GridImp.cu @@ -30,7 +30,7 @@ #include "io/GridVTKWriter/GridVTKWriter.h" - +#include "utilities/communication.h" CONSTANT int DIRECTIONS[DIR_END_MAX][DIMENSION]; @@ -1357,16 +1357,7 @@ void GridImp::findCommunicationIndices(int direction, SPtr<BoundingBox> subDomai void GridImp::findCommunicationIndex( uint index, real coordinate, real limit, int direction ){ // negative direction get a negative sign - real s = ( direction % 2 == 0 ) ? ( -1.0 ) : ( 1.0 ); - - //if( vf::Math::equal( coordinate, limit + s * 0.5 * this->delta ) ){ - // this->communicationIndices[direction].receiveIndices.push_back(index); - // this->setFieldEntry(index, MULTI_GPU_RECIEVE); - //} - //if( vf::Math::equal( coordinate, limit - s * 0.5 * this->delta ) ){ - // this->communicationIndices[direction].sendIndices.push_back(index); - // this->setFieldEntry(index, MULTI_GPU_SEND); - //} + real s = ( direction % 2 == 0 ) ? ( -1.0 ) : ( 1.0 ); if( vf::Math::equal( coordinate, limit + s * 0.5 * this->delta, 0.01 * this->delta ) ){ this->communicationIndices[direction].receiveIndices.push_back(index); @@ -1376,7 +1367,27 @@ void GridImp::findCommunicationIndex( uint index, real coordinate, real limit, i this->communicationIndices[direction].sendIndices.push_back(index); this->setFieldEntry(index, MULTI_GPU_SEND); } -} +} + +uint GridImp::getNumberOfSendNodes(int direction) +{ + return this->communicationIndices[direction].sendIndices.size(); +} + +uint GridImp::getNumberOfReceiveNodes(int direction) +{ + return this->communicationIndices[direction].receiveIndices.size(); +} + +uint GridImp::getSendIndex(int direction, uint index) +{ + return this->communicationIndices[direction].sendIndices[ index ]; +} + +uint GridImp::getReceiveIndex(int direction, uint index) +{ + return this->communicationIndices[direction].receiveIndices[ index ]; +} // --------------------------------------------------------- // diff --git a/src/GridGenerator/grid/GridImp.h b/src/GridGenerator/grid/GridImp.h index 40f66e715..caba6d8f0 100644 --- a/src/GridGenerator/grid/GridImp.h +++ b/src/GridGenerator/grid/GridImp.h @@ -12,7 +12,6 @@ #include "Cell.h" #include "Field.h" - class TriangularMesh; struct Vertex; struct Triangle; @@ -24,17 +23,6 @@ class TriangularMeshDiscretizationStrategy; extern CONSTANT int DIRECTIONS[DIR_END_MAX][DIMENSION]; -namespace CommunicationDirections { - enum { - MX = 0, - PX = 1, - MY = 2, - PY = 3, - MZ = 4, - PZ = 5 - }; -} - class VF_PUBLIC GridImp : public enableSharedFromThis<GridImp>, public Grid { private: @@ -285,6 +273,12 @@ public: void findCommunicationIndices(int direction, SPtr<BoundingBox> subDomainBox); void findCommunicationIndex( uint index, real coordinate, real limit, int direction ); + uint getNumberOfSendNodes(int direction) override; + uint getNumberOfReceiveNodes(int direction) override; + + uint getSendIndex(int direction, uint index) override; + uint getReceiveIndex(int direction, uint index) override; + private: struct CommunicationIndices diff --git a/src/GridGenerator/grid/GridMocks.h b/src/GridGenerator/grid/GridMocks.h index 7668e9295..0b336eaa0 100644 --- a/src/GridGenerator/grid/GridMocks.h +++ b/src/GridGenerator/grid/GridMocks.h @@ -106,6 +106,12 @@ public: void findCommunicationIndices(int direction, SPtr<BoundingBox> subDomainBox) override {} + uint getNumberOfSendNodes(int direction) override { return INVALID_INDEX; } + uint getNumberOfReceiveNodes(int direction) override { return INVALID_INDEX; } + + uint getSendIndex(int direction, uint index) override { return INVALID_INDEX; } + uint getReceiveIndex(int direction, uint index) override { return INVALID_INDEX; } + }; class GridStub : public GridDummy diff --git a/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp b/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp index 6b41580d4..5b4481df6 100644 --- a/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp +++ b/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp @@ -19,6 +19,10 @@ #include <GridGenerator/grid/BoundaryConditions/Side.h> #include <GridGenerator/grid/BoundaryConditions/BoundaryCondition.h> +#include "utilities/communication.h" + +#include "core/Timer/Timer.h" + /*#################################################################################*/ /*---------------------------------public methods----------------------------------*/ /*---------------------------------------------------------------------------------*/ @@ -26,15 +30,14 @@ void SimulationFileWriter::write(std::string folder, SPtr<GridBuilder> builder, { SimulationFileWriter::folder = folder; - std::cout << "Write Simulation Files ... \n"; - clock_t begin = clock(); + *logging::out << logging::Logger::INFO_INTERMEDIATE << "Start writing simulation files to " << folder << ":\n"; + Timer timer; + timer.start(); write(builder, format); - clock_t end = clock(); - real time = real(end - begin) / CLOCKS_PER_SEC; - std::cout << "time write files: " << time << " sec" << std::endl; - std::cout << "... finish writing Simulation Files!\n"; + *logging::out << logging::Logger::INFO_INTERMEDIATE << " Time writing files: " << timer.getCurrentRuntimeInSeconds() << " sec\n"; + *logging::out << logging::Logger::INFO_INTERMEDIATE << "Done writing simulation Files!\n"; } @@ -44,10 +47,11 @@ void SimulationFileWriter::write(std::string folder, SPtr<GridBuilder> builder, void SimulationFileWriter::write(SPtr<GridBuilder> builder, FILEFORMAT format) { const uint numberOfLevel = builder->getNumberOfGridLevels(); - openFiles(); + openFiles(builder); writeLevel(numberOfLevel); //auto qs = createBCVectors(builder->getGrid(0)); + *logging::out << logging::Logger::INFO_INTERMEDIATE << " Coordinate and neighbor files:\n"; for (uint level = 0; level < numberOfLevel; level++) { writeNumberNodes(builder, level); @@ -62,13 +66,17 @@ void SimulationFileWriter::write(SPtr<GridBuilder> builder, FILEFORMAT format) writeGridInterfaceToFile(builder, level); } } - + + *logging::out << logging::Logger::INFO_INTERMEDIATE << " Boundary Condition files:\n"; writeBoundaryQsFile(builder); + + *logging::out << logging::Logger::INFO_INTERMEDIATE << " Communication files:\n"; + writeCommunicationFiles(builder); closeFiles(); } -void SimulationFileWriter::openFiles() +void SimulationFileWriter::openFiles(SPtr<GridBuilder> builder) { std::string path = folder; xCoordFile.open(( path + simulationFileNames::coordX).c_str(), std::ios::out | std::ios::binary); @@ -117,6 +125,20 @@ void SimulationFileWriter::openFiles() valueStreams.push_back(outV); } + if(builder->getCommunicationProcess(CommunicationDirections::MX) != INVALID_INDEX) sendFiles [CommunicationDirections::MX].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::MX)) + "Xs.dat").c_str() ); + if(builder->getCommunicationProcess(CommunicationDirections::PX) != INVALID_INDEX) sendFiles [CommunicationDirections::PX].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::PX)) + "Xs.dat").c_str() ); + if(builder->getCommunicationProcess(CommunicationDirections::MY) != INVALID_INDEX) sendFiles [CommunicationDirections::MY].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::MY)) + "Ys.dat").c_str() ); + if(builder->getCommunicationProcess(CommunicationDirections::PY) != INVALID_INDEX) sendFiles [CommunicationDirections::PY].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::PY)) + "Ys.dat").c_str() ); + if(builder->getCommunicationProcess(CommunicationDirections::MZ) != INVALID_INDEX) sendFiles [CommunicationDirections::MZ].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::MZ)) + "Zs.dat").c_str() ); + if(builder->getCommunicationProcess(CommunicationDirections::PZ) != INVALID_INDEX) sendFiles [CommunicationDirections::PZ].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::PZ)) + "Zs.dat").c_str() ); + + if(builder->getCommunicationProcess(CommunicationDirections::MX) != INVALID_INDEX) receiveFiles[CommunicationDirections::MX].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::MX)) + "Xr.dat").c_str() ); + if(builder->getCommunicationProcess(CommunicationDirections::PX) != INVALID_INDEX) receiveFiles[CommunicationDirections::PX].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::PX)) + "Xr.dat").c_str() ); + if(builder->getCommunicationProcess(CommunicationDirections::MY) != INVALID_INDEX) receiveFiles[CommunicationDirections::MY].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::MY)) + "Yr.dat").c_str() ); + if(builder->getCommunicationProcess(CommunicationDirections::PY) != INVALID_INDEX) receiveFiles[CommunicationDirections::PY].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::PY)) + "Yr.dat").c_str() ); + if(builder->getCommunicationProcess(CommunicationDirections::MZ) != INVALID_INDEX) receiveFiles[CommunicationDirections::MZ].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::MZ)) + "Zr.dat").c_str() ); + if(builder->getCommunicationProcess(CommunicationDirections::PZ) != INVALID_INDEX) receiveFiles[CommunicationDirections::PZ].open( (path + std::to_string(builder->getCommunicationProcess(CommunicationDirections::PZ)) + "Zr.dat").c_str() ); + numberNodes_File.open((path + simulationFileNames::numberNodes).c_str(), std::ios::out | std::ios::binary); LBMvsSI_File.open((path + simulationFileNames::LBMvsSI).c_str(), std::ios::out | std::ios::binary); } @@ -593,6 +615,38 @@ void SimulationFileWriter::writeBoundaryShort(SPtr<Grid> grid, SPtr<BoundaryCond } +void SimulationFileWriter::writeCommunicationFiles(SPtr<GridBuilder> builder) +{ + const uint numberOfLevel = builder->getNumberOfGridLevels(); + + for( uint direction = 0; direction < 6; direction++ ){ + + if(builder->getCommunicationProcess(direction) == INVALID_INDEX) continue; + + sendFiles[direction] << "processor\n"; + sendFiles[direction] << builder->getNumberOfGridLevels() - 1 << "\n"; + + receiveFiles[direction] << "processor\n"; + receiveFiles[direction] << builder->getNumberOfGridLevels() - 1 << "\n"; + + for (uint level = 0; level < numberOfLevel; level++){ + + uint numberOfSendNodes = builder->getGrid(level)->getNumberOfSendNodes(direction); + uint numberOfReceiveNodes = builder->getGrid(level)->getNumberOfReceiveNodes(direction); + + sendFiles[direction] << numberOfSendNodes << "\n"; + receiveFiles[direction] << numberOfReceiveNodes << "\n"; + + for( uint index = 0; index < numberOfSendNodes; index++ ) + sendFiles[direction] << builder->getGrid(level)->getSendIndex (direction, index) << "\n"; + + for( uint index = 0; index < numberOfReceiveNodes; index++ ) + receiveFiles[direction] << builder->getGrid(level)->getReceiveIndex(direction, index) << "\n"; + + } + } +} + void SimulationFileWriter::closeFiles() { xCoordFile.close(); @@ -617,6 +671,20 @@ void SimulationFileWriter::closeFiles() valueStreams[rb]->close(); } + sendFiles[CommunicationDirections::MX].close(); + sendFiles[CommunicationDirections::PX].close(); + sendFiles[CommunicationDirections::MY].close(); + sendFiles[CommunicationDirections::PY].close(); + sendFiles[CommunicationDirections::MZ].close(); + sendFiles[CommunicationDirections::PZ].close(); + + receiveFiles[CommunicationDirections::MX].close(); + receiveFiles[CommunicationDirections::PX].close(); + receiveFiles[CommunicationDirections::MY].close(); + receiveFiles[CommunicationDirections::PY].close(); + receiveFiles[CommunicationDirections::MZ].close(); + receiveFiles[CommunicationDirections::PZ].close(); + numberNodes_File.close(); LBMvsSI_File.close(); } @@ -648,3 +716,6 @@ std::ofstream SimulationFileWriter::offsetVecFC_File; std::ofstream SimulationFileWriter::numberNodes_File; std::ofstream SimulationFileWriter::LBMvsSI_File; + +std::array<std::ofstream, 6> SimulationFileWriter::sendFiles; +std::array<std::ofstream, 6> SimulationFileWriter::receiveFiles; \ No newline at end of file diff --git a/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h b/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h index 82b948ecc..4308ff8ec 100644 --- a/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h +++ b/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h @@ -6,6 +6,7 @@ #include <fstream> #include <memory> #include <vector> +#include <array> #include <GridGenerator/global.h> #include <core/PointerDefinitions.h> @@ -29,7 +30,7 @@ public: private: static void write(SPtr<GridBuilder> builder, FILEFORMAT format); - static void openFiles(); + static void openFiles(SPtr<GridBuilder> builder); static void writeNumberNodes(SPtr<GridBuilder> builder, uint level); static void writeLBMvsSI(SPtr<GridBuilder> builder, uint level); @@ -52,6 +53,9 @@ private: static void writeBoundary(std::vector<real> boundary, int rb); static void writeBoundaryShort(std::vector<real> boundary, int rb); static void writeBoundaryShort(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, uint side); + + static void writeCommunicationFiles(SPtr<GridBuilder> builder); + static void closeFiles(); @@ -78,6 +82,9 @@ private: static std::vector<std::ofstream> qFiles; static std::vector<std::ofstream> valueFiles; + static std::array<std::ofstream, 6> sendFiles; + static std::array<std::ofstream, 6> receiveFiles; + static std::ofstream numberNodes_File; static std::ofstream LBMvsSI_File; diff --git a/src/GridGenerator/utilities/communication.h b/src/GridGenerator/utilities/communication.h new file mode 100644 index 000000000..23dbd0832 --- /dev/null +++ b/src/GridGenerator/utilities/communication.h @@ -0,0 +1,15 @@ +#ifndef Communication_H +#define Communication_H + +namespace CommunicationDirections { + enum { + MX = 0, + PX = 1, + MY = 2, + PY = 3, + MZ = 4, + PZ = 5 + }; +} + +#endif // Communication_H \ No newline at end of file diff --git a/src/GridGenerator/utilities/package.include b/src/GridGenerator/utilities/package.include new file mode 100644 index 000000000..e69de29bb diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp index ae145505f..273670aa4 100644 --- a/targets/apps/HULC/main.cpp +++ b/targets/apps/HULC/main.cpp @@ -9,6 +9,7 @@ #include <string> #include <iostream> #include <stdexcept> +#include <fstream> #include "core/LbmOrGks.h" @@ -37,8 +38,8 @@ #include "grid/GridFactory.h" #include "grid/GridBuilder/MultipleGridBuilder.h" -#include <grid/GridMocks.h> -#include "grid/GridStrategy/GridStrategyMocks.h" +//#include "grid/GridMocks.h" +//#include "grid/GridStrategy/GridStrategyMocks.h" #include "VirtualFluidsBasics/utilities/logger/Logger.h" //#include "VirtualFluidsBasics/basics/utilities/UbLogger.h" #include "io/STLReaderWriter/STLReader.h" @@ -51,6 +52,8 @@ #include "grid/BoundaryConditions/Side.h" #include "grid/BoundaryConditions/BoundaryCondition.h" +#include "utilities/communication.h" + std::string getGridPath(std::shared_ptr<Parameter> para, std::string Gridpath) { if (para->getNumprocs() == 1) @@ -257,7 +260,11 @@ void setParameters(std::shared_ptr<Parameter> para, std::unique_ptr<input::Input void multipleLevel(const std::string& configPath) { - logging::Logger::setStream(&std::cout); + //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); logging::Logger::setDebugLevel(logging::Logger::Level::INFO_LOW); logging::Logger::timeStamp(logging::Logger::ENABLE); @@ -482,25 +489,36 @@ void multipleLevel(const std::string& configPath) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// const uint generatePart = 2; + + 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" ); + + 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("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 == 1 ) + // 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 == 2 ) + // gridBuilder->addCoarseGrid( 0.5 - overlap, -2.0, -2.0, + // 4.0 , 2.0, 2.0, dx); gridBuilder->setNumberOfLayers(10,8); @@ -508,26 +526,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 == 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 ) ); 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); - - if( generatePart == 2 ) - gridBuilder->findCommunicationIndices(CommunicationDirections::MX); + //if( generatePart == 1 ){ + // gridBuilder->findCommunicationIndices(CommunicationDirections::PX); + // gridBuilder->setCommunicationProcess(CommunicationDirections::PX, 1); + //} + // + //if( generatePart == 2 ){ + // gridBuilder->findCommunicationIndices(CommunicationDirections::MX); + // gridBuilder->setCommunicationProcess(CommunicationDirections::MX, 0); + //} ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // other tests @@ -559,19 +580,17 @@ void multipleLevel(const std::string& configPath) 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 == 1) { - gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0); - //gridBuilder->setDomainDecompositionBoundaryCondition(SideType::PX); - } - if (generatePart == 2) { - gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); - //gridBuilder->setDomainDecompositionBoundaryCondition(SideType::MX); - } + //if (generatePart == 1) { + // gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0); + //} + //if (generatePart == 2) { + // gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); + //} //////////////////////////////////////////////////////////////////////////// @@ -629,20 +648,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 == 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"); + //} //gridBuilder->writeGridsToVtk("M:/TestGridGeneration/results/ConcaveTest_"); - //gridBuilder->writeGridsToVtk("C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_2/Test_"); + //gridBuilder->writeGridsToVtk("C:/Users/lenz/Desktop/Work/gridGenerator/grid/Test_"); + gridBuilder->writeGridsToVtk("grid/Test_"); //gridBuilder->writeGridsToVtk("M:/TestGridGeneration/results/CylinderTest_"); //gridBuilder->writeArrows("C:/Users/lenz/Desktop/Work/gridGenerator/gridMultiGPU_Part_2/Test_Arrow"); + gridBuilder->writeArrows("grid/Test_Arrow"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -740,10 +761,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); - //gridGenerator = GridGenerator::make(gridBuilder, para); + //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); } else { @@ -751,6 +776,10 @@ void multipleLevel(const std::string& configPath) gridGenerator = GridReader::make(FileFormat::ASCII, para); } + logFile.close(); + + //return; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -786,9 +815,9 @@ int main( int argc, char* argv[]) { multipleLevel(str2); } - catch (const std::exception e) + catch (const std::exception& e) { - std::cout << e.what() << std::flush; + *logging::out << logging::Logger::ERROR << e.what() << "\n"; //MPI_Abort(MPI_COMM_WORLD, -1); } catch (...) @@ -802,17 +831,17 @@ int main( int argc, char* argv[]) { multipleLevel("C:/Users/lenz/Desktop/Work/gridGenerator/inp/configTest.txt"); } - catch (const std::exception e) + catch (const std::exception& e) { - *logging::out << logging::Logger::ERROR << e.what() << '\n'; + *logging::out << logging::Logger::ERROR << e.what() << "\n"; //std::cout << e.what() << std::flush; //MPI_Abort(MPI_COMM_WORLD, -1); } catch (const std::bad_alloc e) { - *logging::out << logging::Logger::ERROR << "Bad Alloc:" << e.what() << '\n'; + *logging::out << logging::Logger::ERROR << "Bad Alloc:" << e.what() << "\n"; //std::cout << e.what() << std::flush; //MPI_Abort(MPI_COMM_WORLD, -1); } -- GitLab