From ba4e4e6c2509111f7a38cd48bb89a4e06901cb54 Mon Sep 17 00:00:00 2001
From: Matthieu Schaller <matthieu.schaller@durham.ac.uk>
Date: Tue, 26 Jan 2016 17:33:44 +0000
Subject: [PATCH] Removed nested function in engine_init_particles()

---
 src/cell.c   | 23 +++++++++++++++++++++++
 src/cell.h   |  1 +
 src/engine.c | 39 ++-------------------------------------
 src/space.c  |  1 -
 4 files changed, 26 insertions(+), 38 deletions(-)

diff --git a/src/cell.c b/src/cell.c
index 579028eca0..b4716838c6 100644
--- a/src/cell.c
+++ b/src/cell.c
@@ -545,3 +545,26 @@ void cell_split(struct cell *c) {
   for (k = 0; k < gcount; k++)
     if (gparts[k].id > 0) gparts[k].part->gpart = &gparts[k];
 }
+
+/**
+ * @brief Initialises all particles to a valid state even if the ICs were stupid
+ *
+ * @param c Cell to act upon
+ * @param data Unused parameter
+ */
+void cell_init_parts(struct cell *c, void *data) {
+
+  struct part *p = c->parts;
+  struct xpart *xp = c->xparts;
+  
+  for(int i=0; i<c->count; ++i) {
+    p[i].t_begin = 0.;
+    p[i].t_end = 0.;
+    p[i].rho = -1.;
+    xp[i].v_full[0] = p[i].v[0];
+    xp[i].v_full[1] = p[i].v[1];
+    xp[i].v_full[2] = p[i].v[2];
+  }
+  c->t_end_min = 0.;
+}
+
diff --git a/src/cell.h b/src/cell.h
index 4cc09bdecd..5e3b07f298 100644
--- a/src/cell.h
+++ b/src/cell.h
@@ -169,5 +169,6 @@ int cell_pack(struct cell *c, struct pcell *pc);
 int cell_unpack(struct pcell *pc, struct cell *c, struct space *s);
 int cell_getsize(struct cell *c);
 int cell_link(struct cell *c, struct part *parts);
+void cell_init_parts(struct cell *c, void *data);
 
 #endif /* SWIFT_CELL_H */
diff --git a/src/engine.c b/src/engine.c
index d56ac36a64..dfe7faea18 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -1849,41 +1849,10 @@ void engine_init_particles(struct engine *e) {
 
   //engine_print(e);
 
-  //fflush(stdout);
-  //message("Engine prepared");
-
-  /* Nested functions are not standard C. Please extract. */
-
   /* Make sure all particles are ready to go */
-  void initParts(struct part * p, struct xpart * xp, struct cell * c) {
-    p->t_begin = 0.;
-    p->t_end = 0.;
-    p->rho = -1.;
-    xp->v_full[0] = p->v[0];
-    xp->v_full[1] = p->v[1];
-    xp->v_full[2] = p->v[2];
-    c->t_end_min = 0.;
-  }
-
+  /* i.e. clean-up any stupid state in the ICs */
   message("Initialising particles");
-  space_map_parts_xparts(s, initParts);
-
-  /* Now everybody should have sensible smoothing length */
-  void printParts(struct part * p, struct xpart * xp, struct cell * c) {
-    if (p->id == 1000)
-      message("id=%lld h=%f rho=%f t_begin=%f t_end=%f", p->id, p->h, p->rho,
-              p->t_begin, p->t_end);
-  }
-  // space_map_parts_xparts(s, printParts);
-
-  void printCells(struct part * p, struct xpart * xp, struct cell * c) {
-    if (c->super != NULL && 0)
-      message(
-          "c->t_end_min=%f c->t_end_max=%f c->super=%p sort=%p ghost=%p "
-          "kick=%p",
-          c->t_end_min, c->t_end_max, c->super, c->sorts, c->ghost, c->kick);
-  }
-  // space_map_parts_xparts(s, printCells);
+  space_map_cells_pre(s, 1, cell_init_parts, NULL);
 
   /* Now do a density calculation */
   TIMER_TIC;
@@ -1895,10 +1864,6 @@ void engine_init_particles(struct engine *e) {
 
   TIMER_TOC(timer_runners);
 
-  // space_map_parts_xparts(s, printParts);
-
-  printf("\n\n");
-
   /* Ready to go */
   e->step = -1;
 }
diff --git a/src/space.c b/src/space.c
index 37eb1bce0a..0eb114bf92 100644
--- a/src/space.c
+++ b/src/space.c
@@ -849,7 +849,6 @@ void space_map_parts(struct space *s,
  *
  * @param c The #cell we are working in.
  * @param fun Function pointer to apply on the cells.
- * @param data Data passed to the function fun.
  */
 
 static void rec_map_parts_xparts(struct cell *c,
-- 
GitLab