From e7078e43400fa164d99712ac7e52d9d8a4f13828 Mon Sep 17 00:00:00 2001 From: Soeren Peters <peters@irmb.tu-bs.de> Date: Wed, 3 May 2023 08:50:58 +0200 Subject: [PATCH] [CPU] Restructure simulationconfig. --- CMake/VirtualFluidsMacros.cmake | 4 +- .../simulationconfig => }/AbstractLBMSystem.h | 0 src/cpu/simulationconfig/CMakeLists.txt | 6 +- .../{src => }/D3Q27LBMSystem.cpp | 0 .../simulationconfig => }/D3Q27LBMSystem.h | 2 - .../KernelConfigStructs.h | 12 +-- .../{src => }/KernelFactory.cpp | 0 .../simulationconfig => }/KernelFactory.h | 0 .../simulationconfig/{src => }/Simulation.cpp | 77 +++++++------------ .../simulationconfig => }/Simulation.h | 47 +++++------ .../SimulationParameters.h | 0 .../WriterConfiguration.h | 2 +- 12 files changed, 62 insertions(+), 88 deletions(-) rename src/cpu/simulationconfig/{include/simulationconfig => }/AbstractLBMSystem.h (100%) rename src/cpu/simulationconfig/{src => }/D3Q27LBMSystem.cpp (100%) rename src/cpu/simulationconfig/{include/simulationconfig => }/D3Q27LBMSystem.h (96%) rename src/cpu/simulationconfig/{include/simulationconfig => }/KernelConfigStructs.h (59%) rename src/cpu/simulationconfig/{src => }/KernelFactory.cpp (100%) rename src/cpu/simulationconfig/{include/simulationconfig => }/KernelFactory.h (100%) rename src/cpu/simulationconfig/{src => }/Simulation.cpp (75%) rename src/cpu/simulationconfig/{include/simulationconfig => }/Simulation.h (91%) rename src/cpu/simulationconfig/{include/simulationconfig => }/SimulationParameters.h (100%) rename src/cpu/simulationconfig/{include/simulationconfig => }/WriterConfiguration.h (95%) diff --git a/CMake/VirtualFluidsMacros.cmake b/CMake/VirtualFluidsMacros.cmake index 4fd163b2c..2bf2a979e 100644 --- a/CMake/VirtualFluidsMacros.cmake +++ b/CMake/VirtualFluidsMacros.cmake @@ -246,8 +246,8 @@ function(vf_add_library) target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(${library_name} PRIVATE ${CMAKE_BINARY_DIR}) target_include_directories(${library_name} PRIVATE ${VF_SRC_DIR}) - target_include_directories(${library_name} PRIVATE ${VF_SRC_DIR}/gpu) - target_include_directories(${library_name} PRIVATE ${VF_SRC_DIR}/cpu) + target_include_directories(${library_name} PUBLIC ${VF_SRC_DIR}/gpu) + target_include_directories(${library_name} PUBLIC ${VF_SRC_DIR}/cpu) if(BUILD_VF_GPU) target_include_directories(${library_name} PRIVATE "${VF_THIRD_DIR}/cuda_samples/") diff --git a/src/cpu/simulationconfig/include/simulationconfig/AbstractLBMSystem.h b/src/cpu/simulationconfig/AbstractLBMSystem.h similarity index 100% rename from src/cpu/simulationconfig/include/simulationconfig/AbstractLBMSystem.h rename to src/cpu/simulationconfig/AbstractLBMSystem.h diff --git a/src/cpu/simulationconfig/CMakeLists.txt b/src/cpu/simulationconfig/CMakeLists.txt index f0659f67a..255c83dfc 100644 --- a/src/cpu/simulationconfig/CMakeLists.txt +++ b/src/cpu/simulationconfig/CMakeLists.txt @@ -1,8 +1,6 @@ -project(simulationconfig) - -vf_add_library(NAME simulationconfig PUBLIC_LINK VirtualFluidsCore basics muparser lbm) +vf_add_library(PUBLIC_LINK VirtualFluidsCore basics muparser lbm) set_target_properties(simulationconfig PROPERTIES POSITION_INDEPENDENT_CODE ON) -target_include_directories(simulationconfig PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) +target_include_directories(simulationconfig PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) \ No newline at end of file diff --git a/src/cpu/simulationconfig/src/D3Q27LBMSystem.cpp b/src/cpu/simulationconfig/D3Q27LBMSystem.cpp similarity index 100% rename from src/cpu/simulationconfig/src/D3Q27LBMSystem.cpp rename to src/cpu/simulationconfig/D3Q27LBMSystem.cpp diff --git a/src/cpu/simulationconfig/include/simulationconfig/D3Q27LBMSystem.h b/src/cpu/simulationconfig/D3Q27LBMSystem.h similarity index 96% rename from src/cpu/simulationconfig/include/simulationconfig/D3Q27LBMSystem.h rename to src/cpu/simulationconfig/D3Q27LBMSystem.h index 374d64318..581d8049b 100644 --- a/src/cpu/simulationconfig/include/simulationconfig/D3Q27LBMSystem.h +++ b/src/cpu/simulationconfig/D3Q27LBMSystem.h @@ -6,8 +6,6 @@ class D3Q27LBMSystem : public AbstractLBMSystem { public: - D3Q27LBMSystem() = default; - int getNumberOfDirections() override; std::shared_ptr<Interactor3D> makeInteractor() override; diff --git a/src/cpu/simulationconfig/include/simulationconfig/KernelConfigStructs.h b/src/cpu/simulationconfig/KernelConfigStructs.h similarity index 59% rename from src/cpu/simulationconfig/include/simulationconfig/KernelConfigStructs.h rename to src/cpu/simulationconfig/KernelConfigStructs.h index 53ea667c9..c7e468549 100644 --- a/src/cpu/simulationconfig/include/simulationconfig/KernelConfigStructs.h +++ b/src/cpu/simulationconfig/KernelConfigStructs.h @@ -4,14 +4,16 @@ #include <string> #include <basics/DataTypes.h> +#include "KernelFactory.h" + struct LBMKernelConfiguration { KernelFactory::KernelType kernelType; - bool useForcing = false; - real forcingX1{}; - real forcingX2{}; - real forcingX3{}; + bool useForcing {false}; + real forcingX1 {}; + real forcingX2 {}; + real forcingX3 {}; - explicit LBMKernelConfiguration(KernelFactory::KernelType kernelType) : kernelType(kernelType) + LBMKernelConfiguration(KernelFactory::KernelType kernelType) : kernelType(kernelType) { } }; diff --git a/src/cpu/simulationconfig/src/KernelFactory.cpp b/src/cpu/simulationconfig/KernelFactory.cpp similarity index 100% rename from src/cpu/simulationconfig/src/KernelFactory.cpp rename to src/cpu/simulationconfig/KernelFactory.cpp diff --git a/src/cpu/simulationconfig/include/simulationconfig/KernelFactory.h b/src/cpu/simulationconfig/KernelFactory.h similarity index 100% rename from src/cpu/simulationconfig/include/simulationconfig/KernelFactory.h rename to src/cpu/simulationconfig/KernelFactory.h diff --git a/src/cpu/simulationconfig/src/Simulation.cpp b/src/cpu/simulationconfig/Simulation.cpp similarity index 75% rename from src/cpu/simulationconfig/src/Simulation.cpp rename to src/cpu/simulationconfig/Simulation.cpp index a890eb988..ec8773515 100644 --- a/src/cpu/simulationconfig/src/Simulation.cpp +++ b/src/cpu/simulationconfig/Simulation.cpp @@ -1,9 +1,15 @@ +#include <simulationconfig/Simulation.h> + #include <memory> #include <string> #include <set> #include <utility> #include <cmath> + +#ifdef _OPENMP #include <omp.h> +#endif + #include <mpi.h> #include <basics/utilities/UbScheduler.h> @@ -31,18 +37,16 @@ #include <Visitors/SetKernelBlockVisitor.h> #include <simulationconfig/SimulationParameters.h> -#include <simulationconfig/Simulation.h> #include <lbm/constants/D3Q27.h> +#include <logger/Logger.h> + CPUSimulation::CPUSimulation() { this->communicator = vf::mpi::MPICommunicator::getInstance(); - this->grid = std::shared_ptr<Grid3D>(new Grid3D(communicator)); - this->interactors = std::vector<std::shared_ptr<Interactor3D>>(); - this->bcVisitor = BoundaryConditionsBlockVisitor(); - this->registeredAdapters = std::set<std::shared_ptr<BC>>(); + this->grid = std::make_shared<Grid3D>(communicator); } void CPUSimulation::setGridParameters(std::shared_ptr<GridParameters> parameters) @@ -60,9 +64,7 @@ void CPUSimulation::setRuntimeParameters(std::shared_ptr<RuntimeParameters> para this->simulationParameters = std::move(parameters); } -void -CPUSimulation::addObject(const std::shared_ptr<GbObject3D> &object, const std::shared_ptr<BC> &bcAdapter, int state, - const std::string &folderPath) +void CPUSimulation::addObject(const std::shared_ptr<GbObject3D> &object, const std::shared_ptr<BC> &bcAdapter, int state, const std::string &folderPath) { const bool is_in = registeredAdapters.find(bcAdapter) != registeredAdapters.end(); if (!is_in) addBCAdapter(bcAdapter); @@ -85,25 +87,19 @@ void CPUSimulation::setKernelConfiguration(const std::shared_ptr<LBMKernelConfig this->lbmSystem = kernelFactory.makeLBMSystem(kernel->kernelType); } -void CPUSimulation::setWriterConfiguration(const WriterConfiguration &config) +void CPUSimulation::setWriterConfiguration(WriterConfiguration config) { this->writerConfig = config; } -WriterConfiguration &CPUSimulation::getWriterConfig() -{ - return writerConfig; -} - void CPUSimulation::run() { - UBLOG(logINFO, "Beginning simulation setup for MPI rank " << communicator->getProcessID()) + VF_LOG_INFO("Beginning simulation setup for MPI rank {}", communicator->getProcessID()); grid->setDeltaX(gridParameters->nodeDistance); grid->setPeriodicX1(gridParameters->periodicBoundaryInX1); grid->setPeriodicX2(gridParameters->periodicBoundaryInX2); grid->setPeriodicX3(gridParameters->periodicBoundaryInX3); - //int &numberOfNodesInReferenceDirection = gridParameters->numberOfNodesPerDirection[gridParameters->referenceDirectionIndex]; std::shared_ptr<LBMUnitConverter> converter = makeLBMUnitConverter(); int &nodesInX1 = gridParameters->numberOfNodesPerDirection[0]; @@ -146,7 +142,7 @@ void CPUSimulation::run() #ifdef _OPENMP omp_set_num_threads(simulationParameters->numberOfThreads); if (isMainProcess()) - UBLOG(logINFO, "OpenMP is set to run with " << simulationParameters->numberOfThreads << " threads") + VF_LOG_INFO("OpenMP is set to run with {} threads", simulationParameters->numberOfThreads); #endif auto visualizationScheduler = std::make_shared<UbScheduler>(simulationParameters->timeStepLogInterval); @@ -160,9 +156,9 @@ void CPUSimulation::run() simulation->addSimulationObserver(nupsCoProcessor); simulation->addSimulationObserver(mqCoProcessor); - if (isMainProcess()) UBLOG(logINFO, "Simulation-start") + if (isMainProcess()) VF_LOG_TRACE("Simulation start"); simulation->run(); - if (isMainProcess()) UBLOG(logINFO, "Simulation-end") + if (isMainProcess()) VF_LOG_TRACE("Simulation end"); } bool CPUSimulation::isMainProcess() @@ -170,8 +166,7 @@ bool CPUSimulation::isMainProcess() return communicator->getProcessID() == 0; } -void -CPUSimulation::setKernelForcing(const std::shared_ptr<LBMKernel> &kernel, +void CPUSimulation::setKernelForcing(const std::shared_ptr<LBMKernel> &kernel, std::shared_ptr<LBMUnitConverter> &converter) const { kernel->setWithForcing(kernelConfig->useForcing); @@ -182,21 +177,21 @@ CPUSimulation::setKernelForcing(const std::shared_ptr<LBMKernel> &kernel, void CPUSimulation::logSimulationData(const int &nodesInX1, const int &nodesInX2, const int &nodesInX3) const { - UBLOG(logINFO, "Domain size = " << nodesInX1 << " x " << nodesInX2 << " x " << nodesInX3) - UBLOG(logINFO, "dx = " << gridParameters->nodeDistance << " m") - UBLOG(logINFO, "latticeViscosity = " << physicalParameters->latticeViscosity) + VF_LOG_INFO("Domain size = {} x {} x {}", nodesInX1, nodesInX2, nodesInX3); + VF_LOG_INFO("dx = {} m", gridParameters->nodeDistance); + VF_LOG_INFO("latticeViscosity = {}", physicalParameters->latticeViscosity); } void CPUSimulation::generateBlockGrid(const std::shared_ptr<GbObject3D> &gridCube) const { - UBLOG(logINFO, "Generate block grid") + VF_LOG_TRACE("Generate block grid"); GenBlocksGridVisitor genBlocks(gridCube); grid->accept(genBlocks); } void CPUSimulation::setBoundaryConditionProcessor(const std::shared_ptr<LBMKernel> &kernel) { - UBLOG(logINFO, "Create boundary conditions processor") + VF_LOG_TRACE("Create boundary conditions processor"); auto bcProc = std::make_shared<BCSet>(); kernel->setBCSet(bcProc); } @@ -206,7 +201,7 @@ void CPUSimulation::setBlockSize(const int &nodesInX1, const int &nodesInX2, con int blockSizeX1 = nodesInX1 / gridParameters->blocksPerDirection[0]; int blockSizeX2 = nodesInX2 / gridParameters->blocksPerDirection[1]; int blockSizeX3 = nodesInX3 / gridParameters->blocksPerDirection[2]; - UBLOG(logINFO, "Block size = " << blockSizeX1 << " x " << blockSizeX2 << " x " << blockSizeX3) + VF_LOG_INFO("Block size = {} x {} x {}", blockSizeX1, blockSizeX2, blockSizeX3); grid->setBlockNX(blockSizeX1, blockSizeX2, blockSizeX3); @@ -230,7 +225,7 @@ void CPUSimulation::writeBoundaryConditions() const void CPUSimulation::writeBlocksToFile() const { - UBLOG(logINFO, "Write block grid to VTK-file") + VF_LOG_TRACE("Write block grid to VTK-file"); auto scheduler = std::make_shared<UbScheduler>(1); auto ppblocks = std::make_shared<WriteBlocksSimulationObserver>(grid, scheduler, @@ -241,18 +236,13 @@ void CPUSimulation::writeBlocksToFile() const ppblocks.reset(); } -std::shared_ptr<GbObject3D> -CPUSimulation::makeSimulationBoundingBox() +std::shared_ptr<GbObject3D> CPUSimulation::makeSimulationBoundingBox() { auto box = gridParameters->boundingBox(); - auto gridCube = std::make_shared<GbCuboid3D>(box->minX1, box->minX2, box->minX3, box->maxX1, box->maxX2, - box->maxX3); + auto gridCube = std::make_shared<GbCuboid3D>(box->minX1, box->minX2, box->minX3, box->maxX1, box->maxX2, box->maxX3); - if (isMainProcess()) - { - UBLOG(logINFO, "Bounding box dimensions = [(" - << box->minX1 << ", " << box->minX2 << ", " << box->minX3 << "); (" - << box->maxX1 << ", " << box->maxX2 << ", " << box->maxX3 << ")]") + if (isMainProcess()) { + VF_LOG_INFO("Bounding box dimensions = [({}},{}},{}}); ({}}, {}}, {}})]", box->minX1, box->minX2, box->minX3, box->maxX1, box->maxX2, box->maxX3); GbSystem3D::writeGeoObject(gridCube.get(), writerConfig.outputPath + "/geo/gridCube", writerConfig.getWriter()); } @@ -272,15 +262,9 @@ void CPUSimulation::initializeDistributions() grid->accept(initVisitor); } -std::shared_ptr<SimulationObserver> -CPUSimulation::makeMacroscopicQuantitiesCoProcessor(const std::shared_ptr<LBMUnitConverter> &converter, - const std::shared_ptr<UbScheduler> &visualizationScheduler) const +std::shared_ptr<SimulationObserver> CPUSimulation::makeMacroscopicQuantitiesCoProcessor(const std::shared_ptr<LBMUnitConverter> &converter, const std::shared_ptr<UbScheduler> &visualizationScheduler) const { - auto mqCoProcessor = std::make_shared<WriteMacroscopicQuantitiesSimulationObserver>(grid, visualizationScheduler, - writerConfig.outputPath, - writerConfig.getWriter(), - converter, - communicator); + auto mqCoProcessor = std::make_shared<WriteMacroscopicQuantitiesSimulationObserver>(grid, visualizationScheduler, writerConfig.outputPath, writerConfig.getWriter(), converter, communicator); mqCoProcessor->update(0); return mqCoProcessor; } @@ -292,6 +276,3 @@ std::shared_ptr<SimulationObserver> CPUSimulation::makeNupsCoProcessor() const simulationParameters->numberOfThreads, communicator); } - - -CPUSimulation::~CPUSimulation() = default; \ No newline at end of file diff --git a/src/cpu/simulationconfig/include/simulationconfig/Simulation.h b/src/cpu/simulationconfig/Simulation.h similarity index 91% rename from src/cpu/simulationconfig/include/simulationconfig/Simulation.h rename to src/cpu/simulationconfig/Simulation.h index b5f552beb..ee8fc911c 100644 --- a/src/cpu/simulationconfig/include/simulationconfig/Simulation.h +++ b/src/cpu/simulationconfig/Simulation.h @@ -23,33 +23,10 @@ class CPUSimulation { -private: - KernelFactory kernelFactory = KernelFactory(); - - std::shared_ptr<LBMKernel> lbmKernel; - std::shared_ptr<AbstractLBMSystem> lbmSystem; - std::shared_ptr<vf::mpi::Communicator> communicator; - - std::shared_ptr<Grid3D> grid; - std::vector<std::shared_ptr<Interactor3D>> interactors; - BoundaryConditionsBlockVisitor bcVisitor; - std::set<std::shared_ptr<BC>> registeredAdapters; - - std::shared_ptr<LBMKernelConfiguration> kernelConfig; - std::shared_ptr<RuntimeParameters> simulationParameters; - std::shared_ptr<GridParameters> gridParameters; - std::shared_ptr<PhysicalParameters> physicalParameters; - - WriterConfiguration &writerConfig = *(new WriterConfiguration()); - public: - explicit CPUSimulation(); - - ~CPUSimulation(); - - WriterConfiguration &getWriterConfig(); + CPUSimulation(); - void setWriterConfiguration(const WriterConfiguration &config); + void setWriterConfiguration(WriterConfiguration config); void setGridParameters(std::shared_ptr<GridParameters> parameters); @@ -88,7 +65,6 @@ private: void logSimulationData(const int &nodesInX1, const int &nodesInX2, const int &nodesInX3) const; - void setKernelForcing(const std::shared_ptr<LBMKernel> &kernel, std::shared_ptr<LBMUnitConverter> &converter) const; void setConnectors(); @@ -96,6 +72,25 @@ private: void initializeDistributions(); std::shared_ptr<SimulationObserver> makeNupsCoProcessor() const; + +private: + KernelFactory kernelFactory = KernelFactory(); + + std::shared_ptr<LBMKernel> lbmKernel; + std::shared_ptr<AbstractLBMSystem> lbmSystem; + std::shared_ptr<vf::mpi::Communicator> communicator; + + std::shared_ptr<Grid3D> grid; + std::vector<std::shared_ptr<Interactor3D>> interactors; + BoundaryConditionsBlockVisitor bcVisitor {}; + std::set<std::shared_ptr<BC>> registeredAdapters; + + std::shared_ptr<LBMKernelConfiguration> kernelConfig; + std::shared_ptr<RuntimeParameters> simulationParameters; + std::shared_ptr<GridParameters> gridParameters; + std::shared_ptr<PhysicalParameters> physicalParameters; + + WriterConfiguration writerConfig; }; diff --git a/src/cpu/simulationconfig/include/simulationconfig/SimulationParameters.h b/src/cpu/simulationconfig/SimulationParameters.h similarity index 100% rename from src/cpu/simulationconfig/include/simulationconfig/SimulationParameters.h rename to src/cpu/simulationconfig/SimulationParameters.h diff --git a/src/cpu/simulationconfig/include/simulationconfig/WriterConfiguration.h b/src/cpu/simulationconfig/WriterConfiguration.h similarity index 95% rename from src/cpu/simulationconfig/include/simulationconfig/WriterConfiguration.h rename to src/cpu/simulationconfig/WriterConfiguration.h index a487917ff..7f7e5fc25 100644 --- a/src/cpu/simulationconfig/include/simulationconfig/WriterConfiguration.h +++ b/src/cpu/simulationconfig/WriterConfiguration.h @@ -14,7 +14,7 @@ struct WriterConfiguration { OutputFormat outputFormat{}; std::string outputPath{"./output"}; - WbWriter *getWriter() + WbWriter *getWriter() const { if (outputFormat == ASCII) return WbWriterVtkXmlASCII::getInstance(); if (outputFormat == BINARY) return WbWriterVtkXmlBinary::getInstance(); -- GitLab