|
Orrery
A GPU-accelerated N-body gravitational simulator
|
Short numbered documents recording the decisions behind Orrery's design, each with its context, the alternatives that were rejected, and what follows from the choice.
An ADR is written when a decision has a credible alternative that a reviewer might reasonably have expected instead. It is never edited after it is merged; a decision that changes is recorded in a new ADR that supersedes the old one.
To add one, copy 0000-template.md, take the next free number, and link it from the table below and from the pull request that introduces it.
| Number | Title | Status |
|---|---|---|
| 0001 | Record architecture decisions | Accepted |
| 0002 | Pin dependencies to exact commits fetched at configure time | Accepted |
| 0003 | Carry build settings on interface targets rather than global flags | Accepted |
| 0004 | Store particles as one array per component | Accepted |
| 0005 | Allocate particle arrays on cache-line boundaries | Accepted |
| 0006 | Select the scalar precision when the project is configured | Accepted |
| 0007 | Work in units where the gravitational constant is one | Accepted |
| 0008 | Share one softening definition between the solver and the diagnostics | Accepted |
| 0009 | Generate the random distributions in the project rather than with the standard library | Accepted |
| 0010 | Give initial conditions their own layer | Accepted |
| 0011 | Prefer a symplectic second-order integrator to a non-symplectic fourth-order one | Accepted |
| 0012 | Give the integrators an abstract acceleration field of their own | Accepted |
| 0013 | Carry the acceleration between steps as an interface invariant | Accepted |
| 0014 | Give the force solvers an interface of their own above the acceleration field | Accepted |
| 0015 | Compute every pair from both ends rather than applying Newton's third law | Accepted |
| 0016 | Balance the threads dynamically by stealing ranges | Accepted |
| 0017 | Thread the solver through an executor it does not own | Accepted |
| 0018 | Compile the vector kernel apart and choose it at run time | Accepted |
| 0019 | Report the median with its dispersion, and measure the throttling | Accepted |
| 0020 | Keep the arithmetic IEEE and measure what vectorising changed | Accepted |
| 0021 | Sort a copy of the configuration rather than the caller's particles | Accepted |
| 0022 | Rebuild the tree on every force evaluation | Accepted |
| 0023 | Open a cell on the distance to its centre of mass, corrected for where that is | Accepted |
| 0024 | Make quadrupole moments an option that is off by default | Accepted |
| 0025 | Write the GPU backend in SYCL | Accepted |
| 0026 | Put the GPU behind the solver interface, not behind the executor | Accepted |
| 0027 | Stage particle data into the solver's own shared allocations | Accepted |
| 0028 | Build the tree on the host and walk it on the device | Accepted |
| 0029 | Mask the accepted cells rather than descending together | Accepted |
| 0030 | Send the node array to the device narrowed rather than transposed | Accepted |
| 0031 | Define a configuration format rather than adopting one | Accepted |
| 0032 | Store the whole state in a checkpoint, accelerations included | Accepted |
| 0033 | Keep the trajectory and the checkpoint apart | Accepted |
| 0034 | Draw with OpenGL 3.3 through GLFW | Accepted |
| 0035 | Resolve the OpenGL entry points by hand | Accepted |
| 0036 | Tone map exported frames on the host | Accepted |
| 0037 | Write frames as PPM and leave the encoding to an external tool | Accepted |
| 0038 | Sample the galaxy as a scenario rather than as an equilibrium model | Accepted |
| 0039 | Bind to Python with pybind11 | Accepted |
| 0040 | Expose the component arrays rather than arrays of triples | Accepted |
| 0041 | Give a running simulation's state a read-only type of its own | Accepted |
| 0042 | Package the whole project from the repository root | Accepted |
| 0043 | Generate the site with the tool that generates the reference | Accepted |
| 0044 | Write the validation report rather than generating it | Accepted |
| 0045 | Keep the browser client in this repository | Accepted |
| 0046 | Put the renderer's device behind one interface | Accepted |
| 0047 | Decode trajectories off the main thread | Accepted |
| 0048 | Read the diagnostics the run wrote | Accepted |
| 0049 | Put the run and the moment in the address | Accepted |