EXP logo

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:

  1. The N-body code itself and Unix-style auxiliary utilities for manipulating and analyzing N-body phase space.

  2. 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?

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.