From b3022689e512a544e7994cf615fcc085282b180f Mon Sep 17 00:00:00 2001 From: Sven Marcus <s.marcus@outlook.de> Date: Wed, 14 Apr 2021 15:26:15 +0200 Subject: [PATCH] Fix bug in Simulation where SetConnectorsBlockVisitor was called twice --- Python/SlurmTests/poiseuille/settings.py | 4 +- .../include/simulationconfig/Simulation.h | 6 ++ src/cpu/simulationconfig/src/Simulation.cpp | 82 ++++++++++--------- 3 files changed, 51 insertions(+), 41 deletions(-) diff --git a/Python/SlurmTests/poiseuille/settings.py b/Python/SlurmTests/poiseuille/settings.py index 5e4371f0a..e9480eb79 100644 --- a/Python/SlurmTests/poiseuille/settings.py +++ b/Python/SlurmTests/poiseuille/settings.py @@ -6,8 +6,8 @@ from pyfluids.parameters import RuntimeParameters, GridParameters, PhysicalParam grid_params = GridParameters() grid_params.node_distance = 1 -grid_params.number_of_nodes_per_direction = [2, 2, 16] -grid_params.blocks_per_direction = [1, 1, 16] +grid_params.number_of_nodes_per_direction = [1, 1, 16] +grid_params.blocks_per_direction = [1, 1, 8] grid_params.periodic_boundary_in_x1 = True grid_params.periodic_boundary_in_x2 = True diff --git a/src/cpu/simulationconfig/include/simulationconfig/Simulation.h b/src/cpu/simulationconfig/include/simulationconfig/Simulation.h index f145cb546..4bf800c23 100644 --- a/src/cpu/simulationconfig/include/simulationconfig/Simulation.h +++ b/src/cpu/simulationconfig/include/simulationconfig/Simulation.h @@ -86,6 +86,12 @@ private: void setKernelForcing(const std::shared_ptr<LBMKernel> &kernel, std::shared_ptr<LBMUnitConverter> &converter) const; + + void setConnectors(); + + void initializeDistributions(); + + std::shared_ptr<CoProcessor> makeNupsCoProcessor() const; }; #endif \ No newline at end of file diff --git a/src/cpu/simulationconfig/src/Simulation.cpp b/src/cpu/simulationconfig/src/Simulation.cpp index 2d5bae329..2ac83701c 100644 --- a/src/cpu/simulationconfig/src/Simulation.cpp +++ b/src/cpu/simulationconfig/src/Simulation.cpp @@ -115,7 +115,6 @@ void Simulation::run() auto gridCube = makeSimulationBoundingBox(); generateBlockGrid(gridCube); - setKernelForcing(lbmKernel, converter); setBoundaryConditionProcessor(lbmKernel); @@ -129,41 +128,18 @@ void Simulation::run() intHelper.selectBlocks(); - int numberOfProcesses = communicator->getNumberOfProcesses(); SetKernelBlockVisitor kernelVisitor(lbmKernel, physicalParameters->latticeViscosity, numberOfProcesses); grid->accept(kernelVisitor); intHelper.setBC(); -// double bulkViscosity = physicalParameters->latticeViscosity * physicalParameters->bulkViscosityFactor; - //auto iProcessor = std::make_shared<CompressibleOffsetMomentsInterpolationProcessor>(); - //iProcessor->setBulkViscosity(physicalParameters->latticeViscosity, bulkViscosity); - -// SetConnectorsBlockVisitor setConnsVisitor(communicator, true, -// lbmSystem->getNumberOfDirections(), -// physicalParameters->latticeViscosity, iProcessor); - - OneDistributionSetConnectorsBlockVisitor setConnsVisitor(communicator); - grid->accept(setConnsVisitor); - InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - grid->accept(setConnsVisitor); + writeBlocksToFile(); // important: run this after metis & intHelper.selectBlocks() + setConnectors(); + initializeDistributions(); grid->accept(bcVisitor); - writeBoundaryConditions(); - // important: run this after metis & intHelper.selectBlocks() - writeBlocksToFile(); - - auto visualizationScheduler = std::make_shared<UbScheduler>(simulationParameters->timeStepLogInterval); - auto mqCoProcessor = makeMacroscopicQuantitiesCoProcessor(converter, - visualizationScheduler); - - std::shared_ptr<UbScheduler> nupsScheduler(new UbScheduler(100, 100)); - std::shared_ptr<CoProcessor> nupsCoProcessor( - new NUPSCounterCoProcessor(grid, nupsScheduler, simulationParameters->numberOfThreads, communicator)); - #ifdef _OPENMP omp_set_num_threads(simulationParameters->numberOfThreads); @@ -171,6 +147,12 @@ void Simulation::run() UBLOG(logINFO, "OpenMP is set to run with " << simulationParameters->numberOfThreads << " threads") #endif + auto visualizationScheduler = std::make_shared<UbScheduler>(simulationParameters->timeStepLogInterval); + auto mqCoProcessor = makeMacroscopicQuantitiesCoProcessor(converter, + visualizationScheduler); + + auto nupsCoProcessor = makeNupsCoProcessor(); + auto calculator = std::make_shared<BasicCalculator>(grid, visualizationScheduler, simulationParameters->numberOfTimeSteps); calculator->addCoProcessor(nupsCoProcessor); @@ -234,18 +216,7 @@ Simulation::makeLBMUnitConverter() return std::make_shared<LBMUnitConverter>(); } -std::shared_ptr<CoProcessor> -Simulation::makeMacroscopicQuantitiesCoProcessor(const std::shared_ptr<LBMUnitConverter> &converter, - const std::shared_ptr<UbScheduler> &visualizationScheduler) const -{ - auto mqCoProcessor = std::make_shared<WriteMacroscopicQuantitiesCoProcessor>(grid, visualizationScheduler, - writerConfig.outputPath, - writerConfig.getWriter(), - converter, - communicator); - mqCoProcessor->process(0); - return mqCoProcessor; -} + void Simulation::writeBoundaryConditions() const { @@ -287,5 +258,38 @@ Simulation::makeSimulationBoundingBox() return gridCube; } +void Simulation::setConnectors() +{ + OneDistributionSetConnectorsBlockVisitor setConnsVisitor(communicator); + grid->accept(setConnsVisitor); +} + +void Simulation::initializeDistributions() +{ + InitDistributionsBlockVisitor initVisitor; + grid->accept(initVisitor); +} + +std::shared_ptr<CoProcessor> +Simulation::makeMacroscopicQuantitiesCoProcessor(const std::shared_ptr<LBMUnitConverter> &converter, + const std::shared_ptr<UbScheduler> &visualizationScheduler) const +{ + auto mqCoProcessor = std::make_shared<WriteMacroscopicQuantitiesCoProcessor>(grid, visualizationScheduler, + writerConfig.outputPath, + writerConfig.getWriter(), + converter, + communicator); + mqCoProcessor->process(0); + return mqCoProcessor; +} + +std::shared_ptr<CoProcessor> Simulation::makeNupsCoProcessor() const +{ + auto scheduler = std::make_shared<UbScheduler>(100, 100); + return std::make_shared<NUPSCounterCoProcessor>(grid, scheduler, + simulationParameters->numberOfThreads, + communicator); +} + Simulation::~Simulation() = default; -- GitLab