Skip to main content

Parachron

GPL-3.0 based on REBOUND

Parachron

One planetary system, one trajectory, many cores. Parachron integrates a single long orbit of the Solar System in parallel in time. A 5 Gyr integration of the Sun and the eight planets (WHFast512, general relativity, 6 d step) takes 3.0 h on 16 cores instead of 9.2 h on one core, at the accuracy of the serial integrator. With relaxed tolerances, which are still validated by ensembles, it takes 1.8 h (up to 5×).

Parachron is a fork of REBOUND by Hanno Rein and contributors. Everything REBOUND does, Parachron does too, with the same API and results. On top of it, it adds mean-element parareal and a set of single- and multi-core speed-ups. If you do not need these, please use upstream REBOUND.

The idea: mean-element parareal (MEP)

A step of a Wisdom–Holman integrator takes about 100 ns, too short to split across cores. Every step needs the exact end state of the previous one, so extra cores have so far only been used to run more simulations, not to finish one faster.

Parareal breaks this chain. It cuts the time axis into slices and integrates all slices at once, each from a guessed start state. A cheap coarse propagator links the slices, and a few correction sweeps make the result converge to the serial trajectory. For planetary orbits, standard parareal fails. An error δa in a semi-major axis grows into a phase error δλ = −(3/2) n T δa/a through Kepler shear. A cheap coarse integrator gets the short-period terms of a wrong by far more than the corrections can absorb.

MEP gives the coarse propagator what Kepler shear needs:

  • Mean elements. The coarse step evaluates a numerical first-order perturbation theory on the fly: pair accelerations on grids of mean longitudes, a 2-D FFT and the small divisors. With it, the coarse step removes the short-period terms from the inner planets' semi-major axes and advances their secular evolution. The giants are integrated directly with a long step. The result is accurate where shear amplifies errors, and costs about 3 % of a fine slice.
  • Corrections in orbital elements. The parareal correction is formed in Jacobi elements, with longitudes modulo 2π. An energy projection then gives each corrected state the energy of the symplectic fine solution.
  • Pipelined windows. Slices are processed in windows of N slices, one core each. Each window iterates until no planet moves by more than τ (3×10⁻⁶ AU by default) between iterations, which takes typically 3 iterations. Iterations overlap like a pipeline, and the next window starts as soon as the current one has converged.

The results are statistically indistinguishable from serial integrations. The secular frequencies agree to within 10⁻⁷ ″/yr, far below the serial integrator's own time-step error. An ensemble of 16 runs of 200 Myr shows the same dynamics as 16 serial runs, and the energy errors match. Details: Hippke et al. (in prep.), Mean-Element Parareal: Parallel-in-Time Symplectic Integration of the Solar System.

setting (16 cores, AMD Ryzen 9 7950X) speed-up 5 Gyr
serial WHFast512 (reference) 1× 9.2 h
MEP, τ = 3×10⁻⁶ AU (default, serial accuracy) 3.1× 3.0 h
MEP, relaxed tolerances (ensemble-validated) 3.4–5.0× 1.8–2.7 h

Example

import math
import parachron

sim = parachron.Simulation()
sim.add("solar system")                 # Sun + 8 planets
sim.integrator = "whfast512"
sim.dt = 6. / 365.25 * 2. * math.pi     # 6 days (units: AU, Msun, yr/2pi)
sim.exact_finish_time = False
sim.integrator.gr_potential = 1
sim.integrator.corrector = 17

mep = parachron.MEP(sim, checkpoint="run.mep")  # one thread per physical core
mep.integrate(1e8 * 2. * math.pi)               # 100 Myr; sim is updated to the end state
print(mep.mean_iterations, mep.walltime_last)

# later, possibly in another process: continues bitwise identically
mep = parachron.MEP.from_checkpoint("run.mep")
mep.integrate(2e8 * 2. * math.pi)

A C version is in examples/mep_solar_system. MEP runs on Linux and needs a central star with exactly 8 planets. It was designed and validated for the Solar System; other systems are on the to-do list.

What else is different from REBOUND

  • WHFast512 without AVX-512. Portable C kernels (AVX2+FMA, AVX-512, generic, ARM NEON) next to the assembly. The kernels give bitwise identical results on every machine, and two simulations can be stepped together.
  • jacobi_recursive (opt-in): removes a systematic energy offset of +7.5×10⁻¹⁷ per WHFast512 synchronization.
  • Faster on one core. The use-case benchmarks run 2.4× faster than upstream (geometric mean). Results are bitwise identical, except for round-off-level changes in IAS15.
  • Deterministic OpenMP. Results do not depend on the thread count and equal those of the serial build. There is also an opt-in stage-parallel IAS15 (parallel_stages) for N ≳ 100.

Installation

pip install parachron          # once published; or from source:
git clone https://github.com/hippke/parachron && cd parachron && pip install .

The Python module is parachron and can be installed next to REBOUND. Its API is REBOUND's: scripts written for REBOUND run after replacing import rebound with import parachron as rebound. The C library keeps REBOUND's C API (reb_* functions, rebound.h) and is built as before (make in src/, or see the examples).

Credit and citation

Parachron is built on REBOUND. Please cite REBOUND as described in its documentation (sim.cite() lists the papers for the methods you use), and in addition the MEP paper if you use parachron.MEP. REBOUND is developed by Hanno Rein and many contributors: see the upstream repository and its git history. All upstream copyright notices are retained in the source files.

License

Parachron is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version, like REBOUND. It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Copyright © 2011–2026 Hanno Rein and REBOUND contributors (REBOUND). Modifications and additions © 2026 Michael Hippke. The changes relative to REBOUND are listed in CHANGES_FROM_REBOUND.md.

Metadata

Release files for parachron 1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for parachron 1.0
File Size Uploaded Provenance
parachron-1.0.tar.gz 502.7 kB Without provenance Details

Release files / parachron-1.0.tar.gz

Download URL parachron-1.0.tar.gz
Size 502.7 kB
Tags Source
SHA-256 checksum
How to use checksums
1cdd0d3e1ac891277ad67f5ee949e3af5f1a7c3cbb76708a3e1b835a48c02593
BLAKE2b-256 checksum
How to use checksums
506d1aa7a7bc6a534306cc12fba7ddcb9ea16e11a369a139f725b4c736538483
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.2

Security for parachron 1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

1.0 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page