diff --git a/src/kernel.c b/src/kernel.c
new file mode 100644
index 0000000000000000000000000000000000000000..87acb0458eccaeceb66f8e36dc153f445586e4a9
--- /dev/null
+++ b/src/kernel.c
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * This file is part of SWIFT.
+ * Copyright (c) 2015 Pedro Gonnet (pedro.gonnet@durham.ac.uk),
+ *                    Matthieu Schaller (matthieu.schaller@durham.ac.uk)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ ******************************************************************************/
+
+#include <math.h>
+#include <stdio.h>
+
+#include "kernel.h"
+
+
+
+/**
+ * @brief Test the SPH kernel function by dumping it in the interval [0,1].
+ *
+ * @param N number of intervals in [0,1].
+ */
+void kernel_dump(int N) {
+
+  int k;
+  float x, w, dw_dx;
+  float x4[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+  float w4[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+  // float dw_dx4[4] __attribute__ ((aligned (16)));
+
+  for (k = 0; k <= N; k++) {
+    x = ((float)k) / N;
+    x4[3] = x4[2];
+    x4[2] = x4[1];
+    x4[1] = x4[0];
+    x4[0] = x;
+    kernel_deval(x, &w, &dw_dx);
+    // kernel_deval_vec( (vector *)x4 , (vector *)w4 , (vector *)dw_dx4 );
+    printf(" %e %e %e %e %e %e %e\n", x, w, dw_dx, w4[0], w4[1], w4[2], w4[3]);
+  }
+}
+
+
+/**
+ * @brief The Gadget-2 gravity kernel function
+ *
+ * @param r The distance between particles
+ */
+float gadget(float r) {
+  float fac, h_inv, u, r2 = r * r;
+  if (r >= const_epsilon)
+    fac = 1.0f / (r2 * r);
+  else {
+    h_inv = 1. / const_epsilon;
+    u = r * h_inv;
+    if (u < 0.5)
+      fac = const_iepsilon3 * (10.666666666667 + u * u * (32.0 * u - 38.4));
+    else
+      fac = const_iepsilon3 *
+            (21.333333333333 - 48.0 * u + 38.4 * u * u -
+             10.666666666667 * u * u * u - 0.066666666667 / (u * u * u));
+  }
+  return const_G * fac;
+}
+
+
+/**
+ * @brief Test the gravity kernel function by dumping it in the interval [0,1].
+ *
+ * @param r_max The radius up to which the kernel is dumped.
+ * @param N number of intervals in [0,1].
+ */
+void gravity_dump(float r_max, int N) {
+
+  int k;
+  float x, w;
+  float x4[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+  float w4[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+  // float dw_dx4[4] __attribute__ ((aligned (16)));
+
+  for (k = 1; k <= N; k++) {
+    x = (r_max * k) / N;
+    x4[3] = x4[2];
+    x4[2] = x4[1];
+    x4[1] = x4[0];
+    x4[0] = x;
+    kernel_grav_eval(x, &w);
+    w *= const_G / (x * x * x);
+    // blender_deval_vec( (vector *)x4 , (vector *)w4 , (vector *)dw_dx4 );
+    printf(" %.16e %.16e %.16e %.16e %.16e %.16e %.16e\n", x, w * x, w4[0],
+           w4[1], w4[2], w4[3], gadget(x) * x);
+  }
+}