void reb_integrator_hybrid_part2(struct reb_simulation* r){ switch(r->ri_hybrid.mode){ case SYMPLECTIC: reb_integrator_whfast_part2(r); break; case HIGHORDER: reb_integrator_ias15_part2(r); break; default: break; } }
void reb_integrator_hermes_part2(struct reb_simulation* r){ reb_integrator_whfast_part2(r); calc_forces_on_planets(r, r->ri_hermes.a_f); struct reb_simulation* mini = r->ri_hermes.mini; r->ri_hermes.steps++; if (r->ri_hermes.mini_active){ r->ri_hermes.steps_miniactive++; r->ri_hermes.steps_miniN += mini->N; reb_integrate(mini,r->t); for (int i=0; i<mini->N; i++){ r->particles[r->ri_hermes.global_index_from_mini_index[i]] = mini->particles[i]; r->particles[r->ri_hermes.global_index_from_mini_index[i]].sim = r; } // Correct for energy jump in collision if(r->ri_hermes.collision_this_global_dt && r->track_energy_offset){ double Ef = reb_tools_energy(r); r->energy_offset += r->ri_hermes.energy_before_timestep - Ef; } } }