Skip to content
Snippets Groups Projects
Commit b3022689 authored by Sven Marcus's avatar Sven Marcus
Browse files

Fix bug in Simulation where SetConnectorsBlockVisitor was called twice

parent 4a030635
No related branches found
No related tags found
1 merge request!48Adds a convergence analysis test case that runs on Phoenix
......@@ -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
......
......@@ -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
......@@ -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;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment