IAS15: a fast, adaptive, high-order integrator for gravitational dynamics, accurate to machine precision over a billion orbits
Abstract
We present IAS15, a 15th-order integrator to simulate gravitational dynamics. The integrator is based on a Gauß-Radau quadrature and can handle conservative as well as non-conservative forces. We develop a step-size control that can automatically choose an optimal timestep. The algorithm can handle close encounters and high-eccentricity orbits. The systematic errors are kept well below machine precision, and long-term orbit integrations over 109 orbits show that IAS15 is optimal in the sense that it follows Brouwer's law, i.e. the energy error behaves like a random walk. Our tests show that IAS15 is superior to a mixed-variable symplectic integrator and other popular integrators, including high-order ones, in both speed and accuracy. In fact, IAS15 preserves the symplecticity of Hamiltonian systems better than the commonly used nominally symplectic integrators to which we compared it. We provide an open-source implementation of IAS15. The package comes with several easy-to-extend examples involving resonant planetary systems, Kozai-Lidov cycles, close encounters, radiation pressure, quadrupole moment and generic damping functions that can, among other things, be used to simulate planet-disc interactions. Other non-conservative forces can be added easily.
- Publication:
-
Monthly Notices of the Royal Astronomical Society
- Pub Date:
- January 2015
- DOI:
- 10.1093/mnras/stu2164
- arXiv:
- arXiv:1409.4779
- Bibcode:
- 2015MNRAS.446.1424R
- Keywords:
-
- gravitation;
- methods: numerical;
- planets and satellites: dynamical evolution and stability;
- Astrophysics - Earth and Planetary Astrophysics;
- Astrophysics - Instrumentation and Methods for Astrophysics;
- Astrophysics - Solar and Stellar Astrophysics;
- Mathematics - Numerical Analysis
- E-Print:
- Accepted for publication in MNRAS, 14 pages, 7 figures, source code in c and python bindings available at http://github.com/hannorein/rebound