From cb84f0225dbfdf49d6ce73ba57ad483b4371043e Mon Sep 17 00:00:00 2001
From: Sven Marcus <s.marcus@outlook.de>
Date: Wed, 13 Jan 2021 13:30:32 +0100
Subject: [PATCH] Fix segmentation fault in Simulation

---
 Python/poiseuille/simulation.py             |  4 ++--
 src/cpu/simulationconfig/CMakeLists.txt     |  2 +-
 src/cpu/simulationconfig/src/Simulation.cpp | 16 +++++++---------
 3 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/Python/poiseuille/simulation.py b/Python/poiseuille/simulation.py
index f3c48f0ae..2c72c493f 100644
--- a/Python/poiseuille/simulation.py
+++ b/Python/poiseuille/simulation.py
@@ -17,8 +17,8 @@ physical_params.lattice_viscosity = 0.005
 
 runtime_params = RuntimeParameters()
 runtime_params.number_of_threads = 4
-runtime_params.number_of_timesteps = 10000
-runtime_params.timestep_log_interval = 1000
+runtime_params.number_of_timesteps = 1000
+runtime_params.timestep_log_interval = 100
 
 
 def run_simulation(physical_params=physical_params, grid_params=grid_params, runtime_params=runtime_params):
diff --git a/src/cpu/simulationconfig/CMakeLists.txt b/src/cpu/simulationconfig/CMakeLists.txt
index 4c2313023..0d6be59ca 100644
--- a/src/cpu/simulationconfig/CMakeLists.txt
+++ b/src/cpu/simulationconfig/CMakeLists.txt
@@ -11,7 +11,7 @@ file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
 
 add_library(simulationconfig STATIC ${SRC} ${HEADERS})
 
-set_target_properties(simulationconfig PROPERTIES CXX_STANDARD 11 POSITION_INDEPENDENT_CODE ON)
+set_target_properties(simulationconfig PROPERTIES CXX_STANDARD 14 POSITION_INDEPENDENT_CODE ON)
 
 target_include_directories(simulationconfig PUBLIC ${VFBUILDER_INCLUDE_DIR})
 target_link_libraries(simulationconfig PRIVATE VirtualFluidsCore basics muparser)
diff --git a/src/cpu/simulationconfig/src/Simulation.cpp b/src/cpu/simulationconfig/src/Simulation.cpp
index a3574fedc..ceeb81663 100644
--- a/src/cpu/simulationconfig/src/Simulation.cpp
+++ b/src/cpu/simulationconfig/src/Simulation.cpp
@@ -4,6 +4,7 @@
 #include <utility>
 #include <cmath>
 #include <omp.h>
+#include <mpi.h>
 
 #include <basics/utilities/UbScheduler.h>
 #include <geometry3d/GbCuboid3D.h>
@@ -92,7 +93,7 @@ WriterConfiguration &Simulation::getWriterConfig()
 
 void Simulation::run()
 {
-    UBLOG(logINFO, "Beginning simulation setup")
+    UBLOG(logINFO, "Beginning simulation setup for " << communicator->getProcessID())
     grid->setDeltaX(gridParameters->nodeDistance);
     grid->setPeriodicX1(gridParameters->periodicBoundaryInX1);
     grid->setPeriodicX2(gridParameters->periodicBoundaryInX2);
@@ -258,18 +259,15 @@ std::shared_ptr<GbObject3D>
 Simulation::makeSimulationBoundingBox(const int &nodesInX1, const int &nodesInX2,
                                       const int &nodesInX3) const
 {
-
-    double halfDx = -gridParameters->nodeDistance / 2.0;
-    double minX1 = halfDx, minX2 = halfDx, minX3 = halfDx;
-    const double maxX1 = minX1 + gridParameters->nodeDistance * (nodesInX1 - 1) + halfDx;
-    const double maxX2 = minX2 + gridParameters->nodeDistance * (nodesInX2 - 1) + halfDx;
-    const double maxX3 = minX3 + gridParameters->nodeDistance * (nodesInX3 - 1) + halfDx;
+    double minX1 = 0, minX2 = 0, minX3 = 0;
+    const double maxX1 = minX1 + gridParameters->nodeDistance * nodesInX1;
+    const double maxX2 = minX2 + gridParameters->nodeDistance * nodesInX2;
+    const double maxX3 = minX3 + gridParameters->nodeDistance * nodesInX3;
     UBLOG(logINFO, "Bounding box dimensions = [("
             << minX1 << ", " << minX2 << ", " << minX3 << "); ("
             << maxX1 << ", " << maxX2 << ", " << maxX3 << ")]")
 
-
-    std::shared_ptr<GbObject3D> gridCube(new GbCuboid3D(minX1, minX2, minX3, maxX1, maxX2, maxX3));
+    auto gridCube = std::make_shared<GbCuboid3D>(minX1, minX2, minX3, maxX1, maxX2, maxX3);
     GbSystem3D::writeGeoObject(gridCube.get(), writerConfig.outputPath + "/geo/gridCube", writerConfig.getWriter());
     return gridCube;
 }
-- 
GitLab