Skip to main content

differentiable (magneto)hydrodynamics for astrophysics in JAX

Project description

astronomix - differentiable mhd for astrophysics in JAX

Project Status: Active – The project has reached a stable, usable state and is being actively developed. DOI

astronomix (formerly jf1uids) is a differentiable hydrodynamics and magnetohydrodynamics code written in JAX with a focus on astrophysical applications. astronomix is easy to use, well-suited for fast method development, scales to multiple GPUs and its differentiability opens the door for gradient-based inverse modeling and sampling as well as surrogate / solver-in-the-loop training.

Features

  • 1D, 2D and 3D hydrodynamics and magnetohydrodynamics simulations scaling to multiple GPUs
  • a 5th order finite difference constrained transport WENO MHD scheme following HOW-MHD by Seo & Ryu 2023 as well as the provably divergence free and provably positivity preserving finite volume approach of Pang and Wu (2024) (the WENO scheme is also available standalone for hydrodynamics)
  • isothermal hydrodynamics and magnetohydrodynamics are also supported (currently only in the finite difference scheme)
  • for finite volume simulations the basic Lax-Friedrichs, HLL and HLLC Riemann solvers as well as the HLLC-LM (Fleischmann et al., 2020) and HYBRID-HLLC & AM-HLLC (Hu et al., 2025) (sequels to HLLC-LM) variants
  • novel (possibly) conservative self gravity scheme, with improved stability at strong discontinuities
  • spherically symmetric simulations such that mass and energy are conserved based on the scheme of Crittenden and Balachandar (2018)
  • backwards and forwards differentiable with adaptive timestepping
  • turbulent driving, simple stellar wind, simple radiative cooling modules
  • easily extensible, all code is open source

Contents

Installation

astronomix can be installed via pip

pip install astronomix

Note that if JAX is not yet installed, only the CPU version of JAX will be installed as a dependency. For a GPU-compatible installation of JAX, please refer to the JAX installation guide.

Hello World! Your first astronomix simulation

Below is a minimal example of a 1D hydrodynamics shock tube simulation using astronomix.

import jax.numpy as jnp
from astronomix import (
    SimulationConfig, SimulationParams,
    get_helper_data, finalize_config,
    get_registered_variables, construct_primitive_state,
    time_integration
)

# the SimulationConfig holds static 
# configuration parameters
config = SimulationConfig(
    box_size = 1.0,
    num_cells = 101,
    progress_bar = True
)

# the SimulationParams can be changed
# without causing re-compilation
params = SimulationParams(
    t_end = 0.2,
)

# the variable registry allows for the principled
# access of simulation variables from the state array
registered_variables = get_registered_variables(config)

# next we set up the initial state using the helper data
helper_data = get_helper_data(config)
shock_pos = 0.5
r = helper_data.geometric_centers
rho = jnp.where(r < shock_pos, 1.0, 0.125)
u = jnp.zeros_like(r)
p = jnp.where(r < shock_pos, 1.0, 0.1)

# get initial state
initial_state = construct_primitive_state(
    config = config,
    registered_variables = registered_variables,
    density = rho,
    velocity_x = u,
    gas_pressure = p,
)

# finalize and check the config
config = finalize_config(config, initial_state.shape)

# now we run the simulation
final_state = time_integration(initial_state, config, params, registered_variables)

# the final_state holds the final primitive state, the 
# variables can be accessed via the registered_variables
rho_final = final_state[registered_variables.density_index]
u_final = final_state[registered_variables.velocity_index]
p_final = final_state[registered_variables.pressure_index]

You've just run your first astronomix simulation! You can continue with the notebooks below and we have also prepared a more advanced use-case (stellar wind in driven MHD tubulence) which you can Open In Colab.

Notebooks for Getting Started

Showcase

wind in driven turbulence
Magnetohydrodynamics simulation with driven turbulence at a resolution of 512³ cells in a fifth order CT MHD scheme run on 4 H200 GPUs.
wind in driven turbulence
Magnetohydrodynamics simulation with driven turbulence and stellar wind at a resolution of 512³ cells in a fifth order CT MHD scheme run on 4 H200 GPUs.
Orszag-Tang Vortex 3D Collapse
Orszag-Tang Vortex 3D Collapse
Gradients Through Stellar Wind
Gradients Through Stellar Wind
Novel (Possibly) Conservative Self Gravity Scheme, Stable at Strong Discontinuities
Novel (Possibly) Conservative Self Gravity Scheme, Stable at Strong Discontinuities
Wind Parameter Optimization
Wind Parameter Optimization

Performance

Methods paper incoming :)

Frequently Asked Questions (FAQ)

How to store intermediate information during the simulation?

There are two main options for storing intermediate states:

  • activate return_snapshots in the SimulationConfig, set either num_snapshots in the SimulationConfig for equidistant snapshots or snapshot_timepoints in the SimulationParams for custom snapshot timepoints, then activate specific variables to be stored via snapshot_settings in the SimulationConfig (e.g. the full states, the total energy, ..., see here) - these snapshots are stored on the GPU directly, which avoids host-device transfer and is e.g. very useful for losses over intermediate states
  • activate snapshot_callable in the SimulationConfig and provide a callable to the time_integration function which is called at the same timepoints as the snapshots in the first option, this function can then offload specific data (possibly after processing) to the host via jax.debug.callback and save it appropriately (e.g. directly make plots, save to disk in the preferred format, ...)

Documentation

See here.

Citing astronomix

If you use astronomix in your research, please cite via

@misc{storcks_astronomix_2025,
  doi = {10.5281/ZENODO.17782162},
  url = {https://zenodo.org/doi/10.5281/zenodo.17782162},
  author = {Storcks, Leonard},
  title = {astronomix - differentiable MHD in JAX},
  publisher = {Zenodo},
  year = {2025},
  copyright = {MIT License}
}

There is also a workshop paper on an earlier stage of the project:

Storcks, L., & Buck, T. (2024). Differentiable Conservative Radially Symmetric Fluid Simulations and Stellar Winds--jf1uids. arXiv preprint arXiv:2410.23093.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

astronomix-0.6.2.tar.gz (176.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

astronomix-0.6.2-py3-none-any.whl (231.9 kB view details)

Uploaded Python 3

File details

Details for the file astronomix-0.6.2.tar.gz.

File metadata

  • Download URL: astronomix-0.6.2.tar.gz
  • Upload date:
  • Size: 176.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/6.8.0-107-generic

File hashes

Hashes for astronomix-0.6.2.tar.gz
Algorithm Hash digest
SHA256 035e62886914e7b1b9e80865f77859173bcf0d2c6e334aa077774aad5b78770c
MD5 d10f905710f088bb8be04512bbaf019c
BLAKE2b-256 7f411b798cf3cbfc1209b5d5756e1836992b33ec73607b3de132e32a42254aef

See more details on using hashes here.

File details

Details for the file astronomix-0.6.2-py3-none-any.whl.

File metadata

  • Download URL: astronomix-0.6.2-py3-none-any.whl
  • Upload date:
  • Size: 231.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/6.8.0-107-generic

File hashes

Hashes for astronomix-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 018e263abe09e0ef2e71a1f81be77df6d6f6c0b06d5eab17042e315922aabaa6
MD5 bdf23453ff1d185c0ea8391128a8d205
BLAKE2b-256 27f6e4457b753f11d765e288c469f177717c7b32568b7facfff8585f444f0717

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page