diff --git a/src/runner.c b/src/runner.c index 518bac48743164d2f2ea10dd85cb4311735f62b0..fe9f0d91bcb6dcd6449443a4b4d9179d195e7c40 100644 --- a/src/runner.c +++ b/src/runner.c @@ -738,6 +738,8 @@ void runner_dokick1 ( struct runner *r , struct cell *c ) { /* Loop over the progeny. */ for ( k = 0 ; k < 8 ; k++ ) if ( c->progeny[k] != NULL ) { + if ( c->count < space_subsize ) + runner_dokick1( r , c->progeny[k] ); dt_min = fminf( dt_min , c->progeny[k]->dt_min ); dt_max = fmaxf( dt_max , c->progeny[k]->dt_max ); h_max = fmaxf( h_max , c->progeny[k]->h_max ); diff --git a/src/runner.h b/src/runner.h index 58ecf128f5a0b867745a2b2dee5f2e50418c8f31..5ee1ee3a95c36b2e70e6c656cd2a95567c565f84 100644 --- a/src/runner.h +++ b/src/runner.h @@ -74,4 +74,6 @@ void runner_dopair_density ( struct runner *r , struct cell *ci , struct cell *c void runner_doself_density ( struct runner *r , struct cell *c ); void runner_dosub_density ( struct runner *r , struct cell *ci , struct cell *cj , int flags ); void runner_dosort ( struct runner *r , struct cell *c , int flag , int clock ); +void runner_dokick1 ( struct runner *r , struct cell *c ); +void runner_dokick2 ( struct runner *r , struct cell *c ); void *runner_main ( void *data ); diff --git a/src/scheduler.c b/src/scheduler.c index ced1dab562745199d264e0f49c7e75df0eb91e5a..80d9d744417d856e2af7bea3d9e00d44d3be0634 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -72,9 +72,11 @@ void scheduler_map_mkghosts ( struct cell *c , void *data ) { c->ghost = scheduler_addtask( s , task_type_ghost , task_subtype_none , 0 , 0 , c , NULL , 0 ); /* Append a kick1 task and make sure the parent depends on it. */ - c->kick1 = scheduler_addtask( s , task_type_kick1 , task_subtype_none , 0 , 0 , c , NULL , 0 ); - if ( c->parent != NULL ) - task_addunlock( c->kick1 , c->parent->kick1 ); + if ( c->parent == NULL || c->parent->count >= space_subsize ) { + c->kick1 = scheduler_addtask( s , task_type_kick1 , task_subtype_none , 0 , 0 , c , NULL , 0 ); + if ( c->parent != NULL ) + task_addunlock( c->kick1 , c->parent->kick1 ); + } /* Append a kick2 task if we are the active super cell. */ if ( c->super == c && c->nr_tasks > 0 )