From 8ecf0f580ed8e00c615d313a9c665076f63bf8bb Mon Sep 17 00:00:00 2001 From: "LEGOLAS\\lenz" <lenz@irmb.tu-bs.de> Date: Fri, 15 Nov 2019 14:35:05 +0100 Subject: [PATCH] new target for grid generator test --- .../gridGeneratorTest/3rdPartyLinking.cmake | 13 + .../apps/LBM/gridGeneratorTest/CMakeLists.txt | 14 + .../LBM/gridGeneratorTest/CMakePackage.cmake | 9 + targets/apps/LBM/gridGeneratorTest/config.txt | 36 +++ targets/apps/LBM/gridGeneratorTest/main.cpp | 260 ++++++++++++++++++ .../LBM/gridGeneratorTest/package.include | 0 6 files changed, 332 insertions(+) create mode 100644 targets/apps/LBM/gridGeneratorTest/3rdPartyLinking.cmake create mode 100644 targets/apps/LBM/gridGeneratorTest/CMakeLists.txt create mode 100644 targets/apps/LBM/gridGeneratorTest/CMakePackage.cmake create mode 100644 targets/apps/LBM/gridGeneratorTest/config.txt create mode 100644 targets/apps/LBM/gridGeneratorTest/main.cpp create mode 100644 targets/apps/LBM/gridGeneratorTest/package.include diff --git a/targets/apps/LBM/gridGeneratorTest/3rdPartyLinking.cmake b/targets/apps/LBM/gridGeneratorTest/3rdPartyLinking.cmake new file mode 100644 index 000000000..30d15ff96 --- /dev/null +++ b/targets/apps/LBM/gridGeneratorTest/3rdPartyLinking.cmake @@ -0,0 +1,13 @@ +include (${CMAKE_SOURCE_DIR}/${cmakeMacroPath}/MPI/Link.cmake) +linkMPI(${targetName}) +include (${CMAKE_SOURCE_DIR}/${cmakeMacroPath}/Cuda/Link.cmake) +linkCuda(${targetName}) +include (${CMAKE_SOURCE_DIR}/${cmakeMacroPath}/Boost/Link.cmake) +linkBoost(${targetName} "serialization") +#include (${CMAKE_SOURCE_DIR}/${cmakeMacroPath}/Metis/Link.cmake) +#linkMetis(${targetName}) + +if(HULC.BUILD_JSONCPP) + include (${CMAKE_SOURCE_DIR}/${cmakeMacroPath}/JsonCpp/Link.cmake) + linkJsonCpp(${targetName}) +endif() \ No newline at end of file diff --git a/targets/apps/LBM/gridGeneratorTest/CMakeLists.txt b/targets/apps/LBM/gridGeneratorTest/CMakeLists.txt new file mode 100644 index 000000000..6ef6241b5 --- /dev/null +++ b/targets/apps/LBM/gridGeneratorTest/CMakeLists.txt @@ -0,0 +1,14 @@ +setTargetNameToFolderName(${CMAKE_CURRENT_LIST_DIR}) + +set(linkDirectories "") +set(libsToLink VirtualFluids_GPU GridGenerator) +set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/VirtualFluids_GPU" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics") + +#glob files and save in MY_SRCS +include(CMakePackage.cmake) + +buildExe(${targetName} "${MY_SRCS}" "${linkDirectories}" "${libsToLink}" "${includeDirectories}") +groupTarget(${targetName} ${lbmAppFolder}) + +# Specify the linking to 3rdParty libs +include(3rdPartyLinking.cmake) \ No newline at end of file diff --git a/targets/apps/LBM/gridGeneratorTest/CMakePackage.cmake b/targets/apps/LBM/gridGeneratorTest/CMakePackage.cmake new file mode 100644 index 000000000..5d39e3804 --- /dev/null +++ b/targets/apps/LBM/gridGeneratorTest/CMakePackage.cmake @@ -0,0 +1,9 @@ +#FILE ENDINGS +resetFileEndingsToCollect() +addCAndCPPFileTypes() +addFileEndingToCollect("*.cu") +addFileEndingToCollect("*.cuh") + +#GLOB SOURCE FILES IN MY_SRCS +unset(MY_SRCS) +includeRecursiveAllFilesFrom(${targetName} ${CMAKE_CURRENT_LIST_DIR}) \ No newline at end of file diff --git a/targets/apps/LBM/gridGeneratorTest/config.txt b/targets/apps/LBM/gridGeneratorTest/config.txt new file mode 100644 index 000000000..5491a5174 --- /dev/null +++ b/targets/apps/LBM/gridGeneratorTest/config.txt @@ -0,0 +1,36 @@ +################################################## +#GPU Mapping +################################################## +#Devices="0 1 2 3" +#NumberOfDevices=4 + +################################################## +#informations for Writing +################################################## +#Path="E:/DrivenCavity/results" +#Path="F:/Work/Computations/out/DrivenCavity/" +#Prefix="DrivenCavity" +#WriteGrid=true +################################################## +#informations for reading +################################################## +#GridPath="E:/DrivenCavity/dummy" +GridPath="F:/Work/Computations/out/gridGeneratorTest/grid" + +################################################## +#number of grid levels +################################################## +NOGL=2 + +################################################## +#LBM Version +################################################## +#D3Qxx=27 +#MainKernelName=CumulantAA2016CompSP27 + +################################################## +#simulation parameter +################################################## +#TimeEnd=100000 +#TimeOut=1000 +#TimeStartOut=0 \ No newline at end of file diff --git a/targets/apps/LBM/gridGeneratorTest/main.cpp b/targets/apps/LBM/gridGeneratorTest/main.cpp new file mode 100644 index 000000000..6f6e1d746 --- /dev/null +++ b/targets/apps/LBM/gridGeneratorTest/main.cpp @@ -0,0 +1,260 @@ + +#define _USE_MATH_DEFINES +#include <math.h> +#include <string> +#include <sstream> +#include <iostream> +#include <stdexcept> +#include <fstream> +#include <exception> +#include <memory> + +////////////////////////////////////////////////////////////////////////// + +#include "Core/DataTypes.h" +#include "Core/PointerDefinitions.h" + +#include "Core/LbmOrGks.h" +#include "Core/Input/Input.h" +#include "Core/StringUtilities/StringUtil.h" +#include "Core/Input/ConfigFileReader/ConfigFileReader.h" + +#include "Core/VectorTypes.h" +#include "Core/Logger/Logger.h" + +////////////////////////////////////////////////////////////////////////// + +#include "GridGenerator/grid/GridBuilder/LevelGridBuilder.h" +#include "GridGenerator/grid/GridBuilder/MultipleGridBuilder.h" +#include "GridGenerator/grid/BoundaryConditions/Side.h" +#include "GridGenerator/grid/GridFactory.h" + +#include "GridGenerator/geometries/Cuboid/Cuboid.h" +#include "GridGenerator/geometries/TriangularMesh/TriangularMesh.h" +#include "GridGenerator/geometries/Conglomerate/Conglomerate.h" +#include "GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.h" + +#include "GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h" +#include "GridGenerator/io/GridVTKWriter/GridVTKWriter.h" +#include "GridGenerator/io/STLReaderWriter/STLReader.h" +#include "GridGenerator/io/STLReaderWriter/STLWriter.h" + +////////////////////////////////////////////////////////////////////////// + +#include "VirtualFluids_GPU/LBM/Simulation.h" +#include "VirtualFluids_GPU/Communication/Communicator.h" +#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" +#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "VirtualFluids_GPU/Parameter/Parameter.h" +#include "VirtualFluids_GPU/Output/FileWriter.h" + +#include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h" +#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" + +#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// U s e r s e t t i n g s +// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//LbmOrGks lbmOrGks = GKS; +//LbmOrGks lbmOrGks = LBM; + +const real L = 2.0; + +const real Re = 100000.0; + +const real velocity = 1.0; + +const real dt = 0.25e-3; + +const uint nx = 32; + +std::string path("F:/Work/Computations/out/gridGeneratorTest/"); //LEGOLAS +//std::string path("E:/DrivenCavity/results/"); //TESLA03 + +std::string simulationName("DrivenCavity"); + +const uint timeStepOut = 1; +const uint timeStepEnd = 1000000; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void multipleLevel(const std::string& configPath) +{ + logging::Logger::addStream(&std::cout); + logging::Logger::setDebugLevel(logging::Logger::Level::INFO_LOW); + logging::Logger::timeStamp(logging::Logger::ENABLE); + logging::Logger::enablePrintedRankNumbers(logging::Logger::ENABLE); + + auto gridFactory = GridFactory::make(); + gridFactory->setGridStrategy(Device::CPU); + gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::POINT_IN_OBJECT); + + auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory); + + Communicator* comm = Communicator::getInstanz(); + SPtr<ConfigFileReader> configReader = ConfigFileReader::getNewInstance(); + SPtr<ConfigData> configData = configReader->readConfigFile(configPath); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + real dx = L / real(nx); + + gridBuilder->addCoarseGrid(-L, -L, -L, + L, L, L, dx); + + TriangularMesh* cylinderSTL = TriangularMesh::make("F:/Work/Computations/gridGenerator/stl/Cylinder.stl"); + + + //gridBuilder->setNumberOfLayers(6,6); + //gridBuilder->addGrid(cylinderSTL, 1); + + Object* cube = new Cuboid(-0.5,-0.5,-0.5,0.5,0.5,0.5); + gridBuilder->addGrid(cube, 1); + + //gridBuilder->addGeometry(cylinderSTL); + + gridBuilder->setPeriodicBoundaryCondition(false, false, false); + + gridBuilder->buildGrids(LBM, false); // buildGrids() has to be called before setting the BCs!!!! + + gridBuilder->writeGridsToVtk("F:/Work/Computations/out/gridGeneratorTest/grid_"); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + SPtr<Parameter> para = Parameter::make(configData, comm); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + const real velocityLB = velocity * dt / dx; // LB units + + const real vx = velocityLB; // LB units + + const real viscosityLB = nx * velocityLB / Re; // LB units + + *logging::out << logging::Logger::INFO_HIGH << "velocity [dx/dt] = " << velocityLB << " \n"; + *logging::out << logging::Logger::INFO_HIGH << "viscosity [dx/dt] = " << viscosityLB << "\n"; + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + para->setOutputPath( path ); + para->setOutputPrefix( simulationName ); + + para->setFName(para->getOutputPath() + "/" + para->getOutputPrefix()); + + para->setPrintFiles(true); + + para->setVelocity(velocityLB); + para->setViscosity(viscosityLB); + + //para->setVelocityRatio(1.0 / velocityLB); + para->setVelocityRatio(1.0); + + para->setTOut( timeStepOut ); + para->setTEnd( timeStepEnd ); + + para->setUseWale(false); + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + gridBuilder->setVelocityBoundaryCondition(SideType::MX, 0.0, 0.0, 0.0); + //gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::PX, 0.0, 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::PY, 0.0, 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::MY, 0.0, 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::PZ, 0.0, 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::MZ, 0.0, 0.0, 0.0); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + SimulationFileWriter::write("F:/Work/Computations/out/gridGeneratorTest/grid/", gridBuilder, FILEFORMAT::BINARY); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + SPtr<CudaMemoryManager> cudaMemoryManager = CudaMemoryManager::make(para); + SPtr<GridProvider> gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager); + //SPtr<GridProvider> gridGenerator = GridProvider::makeGridReader(FILEFORMAT::BINARY, para, cudaMemoryManager); + + Simulation sim; + SPtr<FileWriter> fileWriter = SPtr<FileWriter>(new FileWriter()); + SPtr<KernelFactoryImp> kernelFactory = KernelFactoryImp::getInstance(); + SPtr<PreProcessorFactoryImp> preProcessorFactory = PreProcessorFactoryImp::getInstance(); + sim.setFactories(kernelFactory, preProcessorFactory); + sim.init(para, gridGenerator, fileWriter, cudaMemoryManager); + + + sim.run(); + sim.free(); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +} + +int main( int argc, char* argv[]) +{ + MPI_Init(&argc, &argv); + std::string str, str2; + if ( argv != NULL ) + { + //str = static_cast<std::string>(argv[0]); + + try + { + ////////////////////////////////////////////////////////////////////////// + + std::string targetPath; + + targetPath = __FILE__; + +#ifdef _WIN32 + targetPath = targetPath.substr(0, targetPath.find_last_of('\\') + 1); +#else + targetPath = targetPath.substr(0, targetPath.find_last_of('/') + 1); +#endif + + std::cout << targetPath << std::endl; + + multipleLevel(targetPath + "config.txt"); + + ////////////////////////////////////////////////////////////////////////// + } + catch (const std::exception& e) + { + + *logging::out << logging::Logger::LOGGER_ERROR << e.what() << "\n"; + } + catch (const std::bad_alloc e) + { + + *logging::out << logging::Logger::LOGGER_ERROR << "Bad Alloc:" << e.what() << "\n"; + } + catch (...) + { + *logging::out << logging::Logger::LOGGER_ERROR << "Unknown exception!\n"; + } + } + + MPI_Finalize(); + return 0; +} diff --git a/targets/apps/LBM/gridGeneratorTest/package.include b/targets/apps/LBM/gridGeneratorTest/package.include new file mode 100644 index 000000000..e69de29bb -- GitLab