From 484e0722f76dac6458c7baaf5ded07d01ea0b77c Mon Sep 17 00:00:00 2001
From: Bert Vandenbroucke <bert.vandenbroucke@gmail.com>
Date: Wed, 15 Mar 2017 11:41:45 +0000
Subject: [PATCH] Fixed bug in 2D Voronoi algorithm. Sod shock now works (with
 fixed cells). Moved gradient and slope limiter defines for SHADOWFAX_SPH to
 const.h.

---
 src/const.h                                  | 10 +++++++++-
 src/hydro/Shadowswift/hydro_gradients.h      |  2 --
 src/hydro/Shadowswift/hydro_slope_limiters.h |  7 ++-----
 src/hydro/Shadowswift/voronoi2d_algorithm.h  |  5 +++--
 4 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/const.h b/src/const.h
index 42a5ae78ed..6d2e8a9895 100644
--- a/src/const.h
+++ b/src/const.h
@@ -57,9 +57,17 @@
 //#define GIZMO_FIX_PARTICLES
 //#define GIZMO_TOTAL_ENERGY
 
+/* Types of gradients to use for SHADOWFAX_SPH */
+/* If no option is chosen, no gradients are used (first order scheme) */
+#define SHADOWFAX_GRADIENTS
+
+/* SHADOWFAX_SPH slope limiters */
+#define SHADOWFAX_SLOPE_LIMITER_PER_FACE
+#define SHADOWFAX_SLOPE_LIMITER_CELL_WIDE
+
 /* Options to control SHADOWFAX_SPH */
 /* This option disables cell movement */
-//#define SHADOWFAX_FIX_CELLS
+#define SHADOWFAX_FIX_CELLS
 /* This option evolves the total energy instead of the thermal energy */
 //#define SHADOWFAX_TOTAL_ENERGY
 
diff --git a/src/hydro/Shadowswift/hydro_gradients.h b/src/hydro/Shadowswift/hydro_gradients.h
index a8b62ebd42..1aea49790d 100644
--- a/src/hydro/Shadowswift/hydro_gradients.h
+++ b/src/hydro/Shadowswift/hydro_gradients.h
@@ -20,8 +20,6 @@
 #ifndef SWIFT_HYDRO_GRADIENTS_H
 #define SWIFT_HYDRO_GRADIENTS_H
 
-#define SHADOWFAX_GRADIENTS
-
 #include "hydro_slope_limiters.h"
 
 #if defined(SHADOWFAX_GRADIENTS)
diff --git a/src/hydro/Shadowswift/hydro_slope_limiters.h b/src/hydro/Shadowswift/hydro_slope_limiters.h
index e1f841411a..a443007b4d 100644
--- a/src/hydro/Shadowswift/hydro_slope_limiters.h
+++ b/src/hydro/Shadowswift/hydro_slope_limiters.h
@@ -20,13 +20,10 @@
 #ifndef SWIFT_HYDRO_SLOPE_LIMITERS_H
 #define SWIFT_HYDRO_SLOPE_LIMITERS_H
 
-#define PER_FACE_LIMITER
-#define CELL_WIDE_LIMITER
-
 #include "dimension.h"
 #include "kernel_hydro.h"
 
-#ifdef PER_FACE_LIMITER
+#ifdef SHADOWFAX_SLOPE_LIMITER_PER_FACE
 
 #define HYDRO_SLOPE_LIMITER_FACE_IMPLEMENTATION \
   "GIZMO piecewise slope limiter (Hopkins 2015)"
@@ -55,7 +52,7 @@ __attribute__((always_inline)) INLINE static void hydro_slope_limit_face(
 
 #endif
 
-#ifdef CELL_WIDE_LIMITER
+#ifdef SHADOWFAX_SLOPE_LIMITER_CELL_WIDE
 
 #define HYDRO_SLOPE_LIMITER_CELL_IMPLEMENTATION \
   "Cell wide slope limiter (Springel 2010)"
diff --git a/src/hydro/Shadowswift/voronoi2d_algorithm.h b/src/hydro/Shadowswift/voronoi2d_algorithm.h
index ff3a2dddc3..3a30e1b5cd 100644
--- a/src/hydro/Shadowswift/voronoi2d_algorithm.h
+++ b/src/hydro/Shadowswift/voronoi2d_algorithm.h
@@ -479,8 +479,9 @@ __attribute__((always_inline)) INLINE float voronoi_cell_finalize(
     cell->centroid[0] += (x[0] + x[1]) * A;
     cell->centroid[1] += (y[0] + y[1]) * A;
 
-    cell->face_midpoints[i][0] = 0.5f * (x[0] + x[1]) + cell->x[0];
-    cell->face_midpoints[i][1] = 0.5f * (y[0] + y[1]) + cell->x[1];
+    /* Note that we only need the RELATIVE positions of the midpoints */
+    cell->face_midpoints[i][0] = 0.5f * (x[0] + x[1]);
+    cell->face_midpoints[i][1] = 0.5f * (y[0] + y[1]);
 
     r2 = x[0] * x[0] + y[0] * y[0];
     r2max = max(r2max, r2);
-- 
GitLab