From f846ad2898f8c14a79f277519f5169851cd5352c Mon Sep 17 00:00:00 2001
From: James Willis <james.s.willis@durham.ac.uk>
Date: Fri, 12 Apr 2019 19:15:52 +0100
Subject: [PATCH] Only run FOF every N steps.

---
 examples/main.c        |  3 ---
 src/engine.c           | 20 ++++++++++++++++++++
 src/engine_marktasks.c |  2 +-
 3 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/examples/main.c b/examples/main.c
index af079d46d3..302abb3935 100644
--- a/examples/main.c
+++ b/examples/main.c
@@ -1023,9 +1023,6 @@ int main(int argc, char *argv[]) {
     engine_dump_snapshot(&e);
     engine_print_stats(&e);
 
-    /* Perform first FOF search after the first snapshot dump. */
-    if (e.policy & engine_policy_fof) fof_search_tree(&s);
-
     /* Is there a dump before the end of the first time-step? */
     engine_check_for_dumps(&e);
 
diff --git a/src/engine.c b/src/engine.c
index b126c00d78..fb54f7251a 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -3263,6 +3263,26 @@ void engine_step(struct engine *e) {
     error("Obtained a time-step of size 0");
 #endif
 
+  /* Perform FOF search to seed black holes. */
+  if (e->policy & engine_policy_fof && !(e->step % 10)) {
+
+    fof_init(e->s);
+
+    struct scheduler *s = &e->sched;
+
+    for(int i=0; i<s->nr_tasks; i++) {
+      
+      struct task *t = &s->tasks[i];
+
+      if (t->type == task_type_fof_self || t->type == task_type_fof_pair) scheduler_activate(s, t); 
+      else t->skip = 1; 
+    }
+
+    engine_launch(e);
+
+    fof_search_tree(e->s);
+  }
+
   /********************************************************/
   /* OK, we are done with the regular stuff. Time for i/o */
   /********************************************************/
diff --git a/src/engine_marktasks.c b/src/engine_marktasks.c
index 20290ce235..1f622d6d24 100644
--- a/src/engine_marktasks.c
+++ b/src/engine_marktasks.c
@@ -671,7 +671,7 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
     
     /* FOF tasks. */
     else if (t_type == task_type_fof_self || t_type == task_type_fof_pair) {
-      scheduler_activate(s, t);
+      //scheduler_activate(s, t);
     }
   }
 }
-- 
GitLab