EXP 7.x documentation
EXP is a fast high-level C++ library with Python bindings for performing and analyzing n-body simulations using biorthogonal and orthogonal expansions, also known as basis function expansions (BFE). The library also supports time series analysis of expansion coefficients using multivariate Singular Spectrum Analysis (mSSA) to discover new dynamical correlations, separate signal from noise, and visualize these in two- and three-dimensional renderings.
There are two entry points into EXP:
The N-body code itself and Unix-style auxiliary utilities for manipulating and analyzing N-body phase space.
The Python interface to basis C++ libraries used by the N-body code. These are designed to enable your post-processing analyses on both EXP and other N-body simulation snapshots (Gadget, Gizmo, Arepo, etc.) within the Python/Jupyter ecosystem. The Python interface is the primary method for time series analyses.
In this documentation, EXP refers to the entire code base and pyEXP refers to the Python EXP API. Many users may only be interested in pyEXP. Since the basis function expansion concepts and mathematics are the shared between EXP and pyEXP, we will describe both together in this documentation.
First steps
Note
TL;DR: A read through the following three topics will get you started.
- EXP at a glance
Understand what EXP is and how it can help you.
- Installation guide
Get EXP installed on your computer.
- Tutorials
A quick-start guide to pyEXP and EXP
Getting help
Having trouble? We’d like to help!
Try the FAQ – it’s got answers to some common questions.
Looking for specific information? Try the Index.
Report bugs in EXP in our issue tracker.
Note
If you want to become an EXPert, please read on …
EXP concepts
These topics provide some background detail on the software and mathematics used in EXP.
- Code intro
Learn about the EXP software design strategy
- BFE theory
Learn about the mathematical principles behind BFE and EXP
- BFE time series analysis
Descriptions for methods to analyze BFE time series
- N-Body optimization in EXP
A quick review of EXP’s ODE solver and multi time step ladder
- Centering
How to choose and monitor the expansion center
- What is YAML?
An example YAML configuration file for EXP
- How to run your own N-body simulation in EXP
A guide for running EXP simulations
- Are there pre-compiled versions of pyEXP and EXP?
- I only want pyEXP, do I need C++ to compile EXP?
- Why would I use EXP rather than pyEXP?
- What hardware do I need to run EXP and pyEXP?
- My HPC cluster does not have the required dependencies. What are my options?
- Can I run EXP or pyEXP in a container?
- I got a “seg fault”, now what do I do?
- How can I do a calculation with phase space in pyEXP
- What do these parameters mean?
How to solve specific problems
- How to visualize the BFE bases used to make your coefficients
Learn how to visualize the EXP bases using pyEXP
- How to generate coefficients from phase-space snapshots
Get familiar with producing coefficients for particle data in pyEXP
- How to save and reuse your newly generated coefficients
Learn how to save and read the coefficients you have produced from your N-body snapshots in pyEXP
- How to convert your coefficients back to physical fields
Learn how to convert your coefficients to physical fields and visualize them with Python and pyEXP
- Making movies of your BFE field quantities
Make some movies from your fields in Python
- How to use mSSA with your coefficient series in pyEXP
Learn how to let your simulation ‘speak for itself’ using multivariate Singular Spectrum Analysis
- Generating orbits in your BFE potential fields
Compute orbits in the gravitational potential fields implied by your coefficients, and why you might want to do this
- The EXP phase-space format
How to use and manipulate the EXP native phase-space format
- How the EXP N-body code selects what and when to write data
A description of the EXP N-body output generator
- How to configure a razor-thin disk
How to configure a thin-disk in EXP
- Debugging EXP
Learn how to debug common problems in EXP/pyEXP
Extending EXP
- Software design goals and features
Understand the EXP architecture.
- User modules
How to use EXP’s dynamic module loader to import your own external force routines
- How to make a new EXP force
How to write your own custom force routines
More about EXP
- Release notes
See what has changed in recent EXP versions.
- Contributing to EXP
Learn how to contribute to the EXP project.
- Doxygen EXP web pages
Doxygen manual for EXP and pyEXP classes.
- Versioning and API stability
Understand EXP versioning and API stability.