diff --git a/src/runner.c b/src/runner.c index fe9f0d91bcb6dcd6449443a4b4d9179d195e7c40..b8bc5c8eee8d62b8e115be5e967633b762b77186 100644 --- a/src/runner.c +++ b/src/runner.c @@ -476,9 +476,9 @@ void runner_doghost ( struct runner *r , struct cell *c ) { /* Left or right? */ if ( finger->density[k]->ci == finger ) - runner_dosub_subset_density( r , finger , c->parts , pid , count , finger->density[k]->cj , -1 ); + runner_dosub_subset_density( r , finger , c->parts , pid , count , finger->density[k]->cj , -1 , 1 ); else - runner_dosub_subset_density( r , finger , c->parts , pid , count , finger->density[k]->ci , -1 ); + runner_dosub_subset_density( r , finger , c->parts , pid , count , finger->density[k]->ci , -1 , 1 ); } @@ -819,9 +819,9 @@ void *runner_main ( void *data ) { break; case task_type_sub: if ( t->subtype == task_subtype_density ) - runner_dosub1_density( r , ci , cj , t->flags ); + runner_dosub1_density( r , ci , cj , t->flags , 1 ); else if ( t->subtype == task_subtype_force ) - runner_dosub2_force( r , ci , cj , t->flags ); + runner_dosub2_force( r , ci , cj , t->flags , 1 ); else error( "Unknown task subtype." ); break; diff --git a/src/runner_doiact.h b/src/runner_doiact.h index bc90afe15bfd66e3d3d56777765e3b59465278fb..50dea3852d66369fa6d119fb94ebaf10aadbe52a 100644 --- a/src/runner_doiact.h +++ b/src/runner_doiact.h @@ -1678,7 +1678,7 @@ void DOSELF2 ( struct runner *r , struct cell *restrict c ) { * redundant computations to find the sid on-the-fly. */ -void DOSUB1 ( struct runner *r , struct cell *ci , struct cell *cj , int sid ) { +void DOSUB1 ( struct runner *r , struct cell *ci , struct cell *cj , int sid , int gettimer ) { int j = 0, k; double shift[3]; @@ -1701,10 +1701,10 @@ void DOSUB1 ( struct runner *r , struct cell *ci , struct cell *cj , int sid ) { /* Loop over all progeny. */ for ( k = 0 ; k < 8 ; k++ ) if ( ci->progeny[k] != NULL ) { - DOSUB1( r , ci->progeny[k] , NULL , -1 ); + DOSUB1( r , ci->progeny[k] , NULL , -1 , 0 ); for ( j = k+1 ; j < 8 ; j++ ) if ( ci->progeny[j] != NULL ) - DOSUB1( r , ci->progeny[k] , ci->progeny[j] , -1 ); + DOSUB1( r , ci->progeny[k] , ci->progeny[j] , -1 , 0 ); } } @@ -1739,193 +1739,193 @@ void DOSUB1 ( struct runner *r , struct cell *ci , struct cell *cj , int sid ) { /* Regular sub-cell interactions of a single cell. */ case 0: /* ( 1 , 1 , 1 ) */ if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); break; case 1: /* ( 1 , 1 , 0 ) */ if ( ci->progeny[6] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[1] , -1 , 0 ); break; case 2: /* ( 1 , 1 , -1 ) */ if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); break; case 3: /* ( 1 , 0 , 1 ) */ if ( ci->progeny[5] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[2] , -1 , 0 ); break; case 4: /* ( 1 , 0 , 0 ) */ if ( ci->progeny[4] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[4] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[4] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[4] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[4] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[4] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[4] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[3] != NULL ) - DOSUB1( r , ci->progeny[4] , cj->progeny[3] , -1 ); + DOSUB1( r , ci->progeny[4] , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[3] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[3] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[3] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[3] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[3] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[3] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[3] , -1 , 0 ); break; case 5: /* ( 1 , 0 , -1 ) */ if ( ci->progeny[4] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[4] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[4] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[3] != NULL ) - DOSUB1( r , ci->progeny[4] , cj->progeny[3] , -1 ); + DOSUB1( r , ci->progeny[4] , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[3] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[3] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[3] , -1 , 0 ); break; case 6: /* ( 1 , -1 , 1 ) */ if ( ci->progeny[5] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[2] , -1 , 0 ); break; case 7: /* ( 1 , -1 , 0 ) */ if ( ci->progeny[4] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[4] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[4] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[3] != NULL ) - DOSUB1( r , ci->progeny[4] , cj->progeny[3] , -1 ); + DOSUB1( r , ci->progeny[4] , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[3] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[3] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[3] , -1 , 0 ); break; case 8: /* ( 1 , -1 , -1 ) */ if ( ci->progeny[4] != NULL && cj->progeny[3] != NULL ) - DOSUB1( r , ci->progeny[4] , cj->progeny[3] , -1 ); + DOSUB1( r , ci->progeny[4] , cj->progeny[3] , -1 , 0 ); break; case 9: /* ( 0 , 1 , 1 ) */ if ( ci->progeny[3] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[3] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[3] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[4] != NULL ) - DOSUB1( r , ci->progeny[3] , cj->progeny[4] , -1 ); + DOSUB1( r , ci->progeny[3] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[4] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[4] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[4] , -1 , 0 ); break; case 10: /* ( 0 , 1 , 0 ) */ if ( ci->progeny[2] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[2] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[2] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[2] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[2] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[4] != NULL ) - DOSUB1( r , ci->progeny[2] , cj->progeny[4] , -1 ); + DOSUB1( r , ci->progeny[2] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[5] != NULL ) - DOSUB1( r , ci->progeny[2] , cj->progeny[5] , -1 ); + DOSUB1( r , ci->progeny[2] , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[3] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[3] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[3] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[3] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[4] != NULL ) - DOSUB1( r , ci->progeny[3] , cj->progeny[4] , -1 ); + DOSUB1( r , ci->progeny[3] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[5] != NULL ) - DOSUB1( r , ci->progeny[3] , cj->progeny[5] , -1 ); + DOSUB1( r , ci->progeny[3] , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[4] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[4] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[5] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[5] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[4] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[4] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[5] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[5] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[5] , -1 , 0 ); break; case 11: /* ( 0 , 1 , -1 ) */ if ( ci->progeny[2] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[2] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[2] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[5] != NULL ) - DOSUB1( r , ci->progeny[2] , cj->progeny[5] , -1 ); + DOSUB1( r , ci->progeny[2] , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[5] != NULL ) - DOSUB1( r , ci->progeny[6] , cj->progeny[5] , -1 ); + DOSUB1( r , ci->progeny[6] , cj->progeny[5] , -1 , 0 ); break; case 12: /* ( 0 , 0 , 1 ) */ if ( ci->progeny[1] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[1] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[1] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[1] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[1] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[1] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[1] != NULL && cj->progeny[4] != NULL ) - DOSUB1( r , ci->progeny[1] , cj->progeny[4] , -1 ); + DOSUB1( r , ci->progeny[1] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[1] != NULL && cj->progeny[6] != NULL ) - DOSUB1( r , ci->progeny[1] , cj->progeny[6] , -1 ); + DOSUB1( r , ci->progeny[1] , cj->progeny[6] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[3] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[3] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[3] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[3] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[4] != NULL ) - DOSUB1( r , ci->progeny[3] , cj->progeny[4] , -1 ); + DOSUB1( r , ci->progeny[3] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[6] != NULL ) - DOSUB1( r , ci->progeny[3] , cj->progeny[6] , -1 ); + DOSUB1( r , ci->progeny[3] , cj->progeny[6] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[4] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[4] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[6] != NULL ) - DOSUB1( r , ci->progeny[5] , cj->progeny[6] , -1 ); + DOSUB1( r , ci->progeny[5] , cj->progeny[6] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[2] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[2] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[4] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[4] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[6] != NULL ) - DOSUB1( r , ci->progeny[7] , cj->progeny[6] , -1 ); + DOSUB1( r , ci->progeny[7] , cj->progeny[6] , -1 , 0 ); break; } @@ -1949,16 +1949,17 @@ void DOSUB1 ( struct runner *r , struct cell *ci , struct cell *cj , int sid ) { } /* otherwise, pair interaction. */ - #ifdef TIMER_VERBOSE - printf( "runner_dosub1[%02i]: flags=%i at depth %i took %.3f ms.\n" , r->id , sid , ci->depth , ((double)TIMER_TOC(TIMER_DOSUB)) / CPU_TPS * 1000 ); - #else - TIMER_TOC(TIMER_DOSUB); - #endif + if ( gettimer ) + #ifdef TIMER_VERBOSE + printf( "runner_dosub1[%02i]: flags=%i at depth %i took %.3f ms.\n" , r->id , sid , ci->depth , ((double)TIMER_TOC(TIMER_DOSUB)) / CPU_TPS * 1000 ); + #else + TIMER_TOC(TIMER_DOSUB); + #endif } -void DOSUB2 ( struct runner *r , struct cell *ci , struct cell *cj , int sid ) { +void DOSUB2 ( struct runner *r , struct cell *ci , struct cell *cj , int sid , int gettimer ) { int j, k; double shift[3]; @@ -1981,10 +1982,10 @@ void DOSUB2 ( struct runner *r , struct cell *ci , struct cell *cj , int sid ) { /* Loop over all progeny. */ for ( k = 0 ; k < 8 ; k++ ) if ( ci->progeny[k] != NULL ) { - DOSUB2( r , ci->progeny[k] , NULL , -1 ); + DOSUB2( r , ci->progeny[k] , NULL , -1 , 0 ); for ( j = k+1 ; j < 8 ; j++ ) if ( ci->progeny[j] != NULL ) - DOSUB2( r , ci->progeny[k] , ci->progeny[j] , -1 ); + DOSUB2( r , ci->progeny[k] , ci->progeny[j] , -1 , 0 ); } } @@ -2019,193 +2020,193 @@ void DOSUB2 ( struct runner *r , struct cell *ci , struct cell *cj , int sid ) { /* Regular sub-cell interactions of a single cell. */ case 0: /* ( 1 , 1 , 1 ) */ if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); break; case 1: /* ( 1 , 1 , 0 ) */ if ( ci->progeny[6] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[1] , -1 , 0 ); break; case 2: /* ( 1 , 1 , -1 ) */ if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); break; case 3: /* ( 1 , 0 , 1 ) */ if ( ci->progeny[5] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[2] , -1 , 0 ); break; case 4: /* ( 1 , 0 , 0 ) */ if ( ci->progeny[4] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[4] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[4] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[4] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[4] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[4] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[4] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[3] != NULL ) - DOSUB2( r , ci->progeny[4] , cj->progeny[3] , -1 ); + DOSUB2( r , ci->progeny[4] , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[3] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[3] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[3] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[3] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[3] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[3] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[3] , -1 , 0 ); break; case 5: /* ( 1 , 0 , -1 ) */ if ( ci->progeny[4] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[4] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[4] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[3] != NULL ) - DOSUB2( r , ci->progeny[4] , cj->progeny[3] , -1 ); + DOSUB2( r , ci->progeny[4] , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[3] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[3] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[3] , -1 , 0 ); break; case 6: /* ( 1 , -1 , 1 ) */ if ( ci->progeny[5] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[2] , -1 , 0 ); break; case 7: /* ( 1 , -1 , 0 ) */ if ( ci->progeny[4] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[4] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[4] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[3] != NULL ) - DOSUB2( r , ci->progeny[4] , cj->progeny[3] , -1 ); + DOSUB2( r , ci->progeny[4] , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[3] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[3] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[3] , -1 , 0 ); break; case 8: /* ( 1 , -1 , -1 ) */ if ( ci->progeny[4] != NULL && cj->progeny[3] != NULL ) - DOSUB2( r , ci->progeny[4] , cj->progeny[3] , -1 ); + DOSUB2( r , ci->progeny[4] , cj->progeny[3] , -1 , 0 ); break; case 9: /* ( 0 , 1 , 1 ) */ if ( ci->progeny[3] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[3] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[3] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[4] != NULL ) - DOSUB2( r , ci->progeny[3] , cj->progeny[4] , -1 ); + DOSUB2( r , ci->progeny[3] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[4] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[4] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[4] , -1 , 0 ); break; case 10: /* ( 0 , 1 , 0 ) */ if ( ci->progeny[2] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[2] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[2] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[2] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[2] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[4] != NULL ) - DOSUB2( r , ci->progeny[2] , cj->progeny[4] , -1 ); + DOSUB2( r , ci->progeny[2] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[5] != NULL ) - DOSUB2( r , ci->progeny[2] , cj->progeny[5] , -1 ); + DOSUB2( r , ci->progeny[2] , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[3] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[3] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[3] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[3] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[4] != NULL ) - DOSUB2( r , ci->progeny[3] , cj->progeny[4] , -1 ); + DOSUB2( r , ci->progeny[3] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[5] != NULL ) - DOSUB2( r , ci->progeny[3] , cj->progeny[5] , -1 ); + DOSUB2( r , ci->progeny[3] , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[4] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[4] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[5] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[5] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[4] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[4] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[5] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[5] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[5] , -1 , 0 ); break; case 11: /* ( 0 , 1 , -1 ) */ if ( ci->progeny[2] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[2] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[2] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[5] != NULL ) - DOSUB2( r , ci->progeny[2] , cj->progeny[5] , -1 ); + DOSUB2( r , ci->progeny[2] , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[5] != NULL ) - DOSUB2( r , ci->progeny[6] , cj->progeny[5] , -1 ); + DOSUB2( r , ci->progeny[6] , cj->progeny[5] , -1 , 0 ); break; case 12: /* ( 0 , 0 , 1 ) */ if ( ci->progeny[1] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[1] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[1] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[1] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[1] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[1] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[1] != NULL && cj->progeny[4] != NULL ) - DOSUB2( r , ci->progeny[1] , cj->progeny[4] , -1 ); + DOSUB2( r , ci->progeny[1] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[1] != NULL && cj->progeny[6] != NULL ) - DOSUB2( r , ci->progeny[1] , cj->progeny[6] , -1 ); + DOSUB2( r , ci->progeny[1] , cj->progeny[6] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[3] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[3] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[3] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[3] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[4] != NULL ) - DOSUB2( r , ci->progeny[3] , cj->progeny[4] , -1 ); + DOSUB2( r , ci->progeny[3] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[6] != NULL ) - DOSUB2( r , ci->progeny[3] , cj->progeny[6] , -1 ); + DOSUB2( r , ci->progeny[3] , cj->progeny[6] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[4] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[4] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[6] != NULL ) - DOSUB2( r , ci->progeny[5] , cj->progeny[6] , -1 ); + DOSUB2( r , ci->progeny[5] , cj->progeny[6] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[2] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[2] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[4] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[4] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[6] != NULL ) - DOSUB2( r , ci->progeny[7] , cj->progeny[6] , -1 ); + DOSUB2( r , ci->progeny[7] , cj->progeny[6] , -1 , 0 ); break; } @@ -2229,16 +2230,17 @@ void DOSUB2 ( struct runner *r , struct cell *ci , struct cell *cj , int sid ) { } /* otherwise, pair interaction. */ - #ifdef TIMER_VERBOSE - printf( "runner_dosub2[%02i]: flags=%i at depth %i took %.3f ms.\n" , r->id , sid , ci->depth , ((double)TIMER_TOC(TIMER_DOSUB)) / CPU_TPS * 1000 ); - #else - TIMER_TOC(TIMER_DOSUB); - #endif + if ( gettimer ) + #ifdef TIMER_VERBOSE + printf( "runner_dosub2[%02i]: flags=%i at depth %i took %.3f ms.\n" , r->id , sid , ci->depth , ((double)TIMER_TOC(TIMER_DOSUB)) / CPU_TPS * 1000 ); + #else + TIMER_TOC(TIMER_DOSUB); + #endif } -void DOSUB_SUBSET ( struct runner *r , struct cell *ci , struct part *parts , int *ind , int count , struct cell *cj , int sid ) { +void DOSUB_SUBSET ( struct runner *r , struct cell *ci , struct part *parts , int *ind , int count , struct cell *cj , int sid , int gettimer ) { int j, k; double shift[3]; @@ -2272,10 +2274,10 @@ void DOSUB_SUBSET ( struct runner *r , struct cell *ci , struct part *parts , in if ( ci->split ) { /* Loop over all progeny. */ - DOSUB_SUBSET( r , sub , parts , ind , count , NULL , -1 ); + DOSUB_SUBSET( r , sub , parts , ind , count , NULL , -1 , 0 ); for ( j = 0 ; j < 8 ; j++ ) if ( ci->progeny[j] != sub && ci->progeny[j] != NULL ) - DOSUB_SUBSET( r , sub , parts , ind , count , ci->progeny[j] , -1 ); + DOSUB_SUBSET( r , sub , parts , ind , count , ci->progeny[j] , -1 , 0 ); } @@ -2304,345 +2306,345 @@ void DOSUB_SUBSET ( struct runner *r , struct cell *ci , struct part *parts , in /* Regular sub-cell interactions of a single cell. */ case 0: /* ( 1 , 1 , 1 ) */ if ( ci->progeny[7] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , ci->progeny[0] , parts , ind , count , cj->progeny[7] , -1 ); + DOSUB_SUBSET( r , ci->progeny[0] , parts , ind , count , cj->progeny[7] , -1 , 0 ); break; case 1: /* ( 1 , 1 , 0 ) */ if ( ci->progeny[6] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[7] , -1 , 0 ); break; case 2: /* ( 1 , 1 , -1 ) */ if ( ci->progeny[6] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 , 0 ); break; case 3: /* ( 1 , 0 , 1 ) */ if ( ci->progeny[5] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[7] , -1 , 0 ); break; case 4: /* ( 1 , 0 , 0 ) */ if ( ci->progeny[4] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[4] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[4] , -1 , 0 ); if ( ci->progeny[4] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[4] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[4] , -1 , 0 ); if ( ci->progeny[4] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[4] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[4] , -1 , 0 ); if ( ci->progeny[4] == sub && cj->progeny[3] != NULL ) - DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[3] , -1 ); + DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[3] == sub ) - DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[4] , -1 ); + DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[4] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[3] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[3] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[3] == sub ) - DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[3] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[3] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[3] == sub ) - DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[3] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[3] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[3] == sub ) - DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[7] , -1 , 0 ); break; case 5: /* ( 1 , 0 , -1 ) */ if ( ci->progeny[4] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[4] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[4] , -1 , 0 ); if ( ci->progeny[4] == sub && cj->progeny[3] != NULL ) - DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[3] , -1 ); + DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[3] == sub ) - DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[4] , -1 ); + DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[4] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[3] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[3] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[3] == sub ) - DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[6] , -1 , 0 ); break; case 6: /* ( 1 , -1 , 1 ) */ if ( ci->progeny[5] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[5] , -1 , 0 ); break; case 7: /* ( 1 , -1 , 0 ) */ if ( ci->progeny[4] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[4] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[4] , -1 , 0 ); if ( ci->progeny[4] == sub && cj->progeny[3] != NULL ) - DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[3] , -1 ); + DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[3] == sub ) - DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[4] , -1 ); + DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[4] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[3] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[3] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[3] == sub ) - DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[5] , -1 , 0 ); break; case 8: /* ( 1 , -1 , -1 ) */ if ( ci->progeny[4] == sub && cj->progeny[3] != NULL ) - DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[3] , -1 ); + DOSUB_SUBSET( r , ci->progeny[4] , parts , ind , count , cj->progeny[3] , -1 , 0 ); if ( ci->progeny[4] != NULL && cj->progeny[3] == sub ) - DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[4] , -1 ); + DOSUB_SUBSET( r , cj->progeny[3] , parts , ind , count , ci->progeny[4] , -1 , 0 ); break; case 9: /* ( 0 , 1 , 1 ) */ if ( ci->progeny[3] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[3] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[3] , -1 , 0 ); if ( ci->progeny[3] == sub && cj->progeny[4] != NULL ) - DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[4] , -1 ); + DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[4] == sub ) - DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[3] , -1 ); + DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[3] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[4] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[4] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[4] == sub ) - DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[7] , -1 , 0 ); break; case 10: /* ( 0 , 1 , 0 ) */ if ( ci->progeny[2] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[2] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[2] , -1 , 0 ); if ( ci->progeny[2] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[2] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[2] , -1 , 0 ); if ( ci->progeny[2] == sub && cj->progeny[4] != NULL ) - DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[4] , -1 ); + DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[4] == sub ) - DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[2] , -1 ); + DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[2] , -1 , 0 ); if ( ci->progeny[2] == sub && cj->progeny[5] != NULL ) - DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[5] , -1 ); + DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[5] == sub ) - DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[2] , -1 ); + DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[2] , -1 , 0 ); if ( ci->progeny[3] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[3] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[3] , -1 , 0 ); if ( ci->progeny[3] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[3] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[3] , -1 , 0 ); if ( ci->progeny[3] == sub && cj->progeny[4] != NULL ) - DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[4] , -1 ); + DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[4] == sub ) - DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[3] , -1 ); + DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[3] , -1 , 0 ); if ( ci->progeny[3] == sub && cj->progeny[5] != NULL ) - DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[5] , -1 ); + DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[5] == sub ) - DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[3] , -1 ); + DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[3] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[4] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[4] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[4] == sub ) - DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[5] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[5] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[5] == sub ) - DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[4] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[4] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[4] == sub ) - DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[5] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[5] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[5] == sub ) - DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[7] , -1 , 0 ); break; case 11: /* ( 0 , 1 , -1 ) */ if ( ci->progeny[2] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[2] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[2] , -1 , 0 ); if ( ci->progeny[2] == sub && cj->progeny[5] != NULL ) - DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[5] , -1 ); + DOSUB_SUBSET( r , ci->progeny[2] , parts , ind , count , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[2] != NULL && cj->progeny[5] == sub ) - DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[2] , -1 ); + DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[2] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[1] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[1] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[1] == sub ) - DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[1] , parts , ind , count , ci->progeny[6] , -1 , 0 ); if ( ci->progeny[6] == sub && cj->progeny[5] != NULL ) - DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[5] , -1 ); + DOSUB_SUBSET( r , ci->progeny[6] , parts , ind , count , cj->progeny[5] , -1 , 0 ); if ( ci->progeny[6] != NULL && cj->progeny[5] == sub ) - DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[6] , -1 ); + DOSUB_SUBSET( r , cj->progeny[5] , parts , ind , count , ci->progeny[6] , -1 , 0 ); break; case 12: /* ( 0 , 0 , 1 ) */ if ( ci->progeny[1] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[1] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[1] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[1] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[1] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[1] , -1 , 0 ); if ( ci->progeny[1] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[1] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[1] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[1] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[1] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[1] , -1 , 0 ); if ( ci->progeny[1] == sub && cj->progeny[4] != NULL ) - DOSUB_SUBSET( r , ci->progeny[1] , parts , ind , count , cj->progeny[4] , -1 ); + DOSUB_SUBSET( r , ci->progeny[1] , parts , ind , count , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[1] != NULL && cj->progeny[4] == sub ) - DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[1] , -1 ); + DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[1] , -1 , 0 ); if ( ci->progeny[1] == sub && cj->progeny[6] != NULL ) - DOSUB_SUBSET( r , ci->progeny[1] , parts , ind , count , cj->progeny[6] , -1 ); + DOSUB_SUBSET( r , ci->progeny[1] , parts , ind , count , cj->progeny[6] , -1 , 0 ); if ( ci->progeny[1] != NULL && cj->progeny[6] == sub ) - DOSUB_SUBSET( r , cj->progeny[6] , parts , ind , count , ci->progeny[1] , -1 ); + DOSUB_SUBSET( r , cj->progeny[6] , parts , ind , count , ci->progeny[1] , -1 , 0 ); if ( ci->progeny[3] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[3] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[3] , -1 , 0 ); if ( ci->progeny[3] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[3] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[3] , -1 , 0 ); if ( ci->progeny[3] == sub && cj->progeny[4] != NULL ) - DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[4] , -1 ); + DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[4] == sub ) - DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[3] , -1 ); + DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[3] , -1 , 0 ); if ( ci->progeny[3] == sub && cj->progeny[6] != NULL ) - DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[6] , -1 ); + DOSUB_SUBSET( r , ci->progeny[3] , parts , ind , count , cj->progeny[6] , -1 , 0 ); if ( ci->progeny[3] != NULL && cj->progeny[6] == sub ) - DOSUB_SUBSET( r , cj->progeny[6] , parts , ind , count , ci->progeny[3] , -1 ); + DOSUB_SUBSET( r , cj->progeny[6] , parts , ind , count , ci->progeny[3] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[4] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[4] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[4] == sub ) - DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[5] == sub && cj->progeny[6] != NULL ) - DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[6] , -1 ); + DOSUB_SUBSET( r , ci->progeny[5] , parts , ind , count , cj->progeny[6] , -1 , 0 ); if ( ci->progeny[5] != NULL && cj->progeny[6] == sub ) - DOSUB_SUBSET( r , cj->progeny[6] , parts , ind , count , ci->progeny[5] , -1 ); + DOSUB_SUBSET( r , cj->progeny[6] , parts , ind , count , ci->progeny[5] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[0] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[0] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[0] == sub ) - DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[0] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[2] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[2] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[2] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[2] == sub ) - DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[2] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[4] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[4] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[4] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[4] == sub ) - DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[4] , parts , ind , count , ci->progeny[7] , -1 , 0 ); if ( ci->progeny[7] == sub && cj->progeny[6] != NULL ) - DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[6] , -1 ); + DOSUB_SUBSET( r , ci->progeny[7] , parts , ind , count , cj->progeny[6] , -1 , 0 ); if ( ci->progeny[7] != NULL && cj->progeny[6] == sub ) - DOSUB_SUBSET( r , cj->progeny[6] , parts , ind , count , ci->progeny[7] , -1 ); + DOSUB_SUBSET( r , cj->progeny[6] , parts , ind , count , ci->progeny[7] , -1 , 0 ); break; } @@ -2656,11 +2658,12 @@ void DOSUB_SUBSET ( struct runner *r , struct cell *ci , struct part *parts , in } /* otherwise, pair interaction. */ - #ifdef TIMER_VERBOSE - printf( "runner_dosub[%02i]: flags=%i at depth %i took %.3f ms.\n" , r->id , sid , ci->depth , ((double)TIMER_TOC(TIMER_DOSUB)) / CPU_TPS * 1000 ); - #else - TIMER_TOC(TIMER_DOSUB); - #endif + if ( gettimer ) + #ifdef TIMER_VERBOSE + printf( "runner_dosub[%02i]: flags=%i at depth %i took %.3f ms.\n" , r->id , sid , ci->depth , ((double)TIMER_TOC(TIMER_DOSUB)) / CPU_TPS * 1000 ); + #else + TIMER_TOC(TIMER_DOSUB); + #endif }