Skip to main content

Compressible Finite Volume Solver for Atmospheric Dynamics, Chemistry and Thermodynamics

Reason this release was yanked:

no implicit

Project description

Snapy

Compressible Finite Volume Solver for Atmospheric Dynamics, Chemistry and Thermodynamics

Snapy is the dynamic core for simulating atmospheric and planetary dynamics using PyTorch tensors and GPU acceleration.

PyPI version License: MIT

Features

  • GPU-Accelerated: Built on PyTorch for efficient GPU computation
  • Flexible Interfaces: Both Python and C++ APIs available
  • Compressible Flow: Finite volume solver for atmospheric dynamics
  • Multi-platform: Support for Linux and macOS
  • NetCDF Output: Standard output format for scientific data

Installation

Quick Install (Python Interface)

The easiest way to get started is to install via pip:

pip install snapy

This will install the Python interface with pre-built binaries for Python 3.9-3.13 on Linux (x86_64) and macOS (ARM64).

Parallel run

pd-run 6 ./test_exchange.release

list listening port

lsof -i:29500

kill listening port

pkill -9 XXXXX

Requirements:

  • Python 3.9 or higher
  • PyTorch 2.7.x
  • NumPy
  • kintera >= 1.1.5

Build from Source (Advanced)

Building from source is recommended only for advanced users who need to:

  • Modify the C++ core
  • Use custom PyTorch versions
  • Access the C++ interface directly
  • Develop new features

Prerequisites:

  • CMake 3.20+
  • C++17 compatible compiler
  • Autoconf, Automake, Libtool, and pkg-config on Linux (for fetched UCX)
  • PyTorch 2.7.x with C++ libraries
  • NetCDF C library
  • kintera >= 1.1.5

Build steps:

  1. Clone the repository:
git clone https://github.com/chengcli/snapy.git
cd snapy
  1. Install dependencies:
pip install numpy kintera torch==2.7.1
  1. Install NetCDF:
    • Linux (Ubuntu/Debian):
      sudo apt-get install libnetcdf-dev
      
    • macOS:
      brew install netcdf
      

UCX support is provided by the Python package commux. Install snapy's Python dependencies in the active environment before configuring; use -DUCX=OFF only when building a Gloo-only configuration.

  1. Configure and build:
cmake -B build -DCMAKE_BUILD_TYPE=Release -DNETCDF=ON
cmake --build build --parallel 3
  1. Install the Python package:
pip install .

Examples

The examples/ directory contains several working examples:

Python Examples:

  • shock.py - Sod shock tube with internal boundary
  • straka.py - Straka cold bubble convection test
  • robert.py - Robert warm bubble convection test

C++ Examples:

  • shock.cpp - Sod shock tube (C++)
  • straka.cpp - Straka cold bubble (C++)

Run a Python example:

cd examples
python shock.py

Run a C++ example (after building):

cd build/examples
./shock

See examples/README for detailed documentation on the code structure and available examples.

Configuration

Simulations are configured using YAML files that specify:

  • Grid dimensions and domain size
  • Time integration settings (RK stages, CFL number)
  • Boundary conditions
  • Output settings (frequency, variables, format)
  • Equation of state and thermodynamics

Example configuration files (.yaml) are provided alongside the examples.

Development

Testing

Run tests after building:

cd build/tests
ctest --output-on-failure

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contact

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

snapy-2.8.4-cp313-cp313-manylinux_2_27_x86_64.whl (57.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

snapy-2.8.4-cp312-cp312-manylinux_2_27_x86_64.whl (57.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

snapy-2.8.4-cp311-cp311-manylinux_2_27_x86_64.whl (57.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

snapy-2.8.4-cp310-cp310-manylinux_2_27_x86_64.whl (57.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

File details

Details for the file snapy-2.8.4-cp313-cp313-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for snapy-2.8.4-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 9d380a586ea5b54c23aabf2abdd41bc46a184c1f78fcacf57d2b4d8f0883ae7c
MD5 db659ca3bcc5d4e391b8aa70449add33
BLAKE2b-256 2db499cefae4cd1447b6e2c2592a90d7320a55f32a484c137671857872b7305a

See more details on using hashes here.

File details

Details for the file snapy-2.8.4-cp312-cp312-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for snapy-2.8.4-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 ac50a95b8bc8d54f398951504603b3edcb81003a9f99e903bf24fb161a0c40c7
MD5 f702d3b0f74d4c53b2225dc7f06b80d4
BLAKE2b-256 b286bc4db11b1be9d5ef4ddc1e96ec9f98855aaed1e237780cf41c197fc1b902

See more details on using hashes here.

File details

Details for the file snapy-2.8.4-cp311-cp311-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for snapy-2.8.4-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 a46290316135188333cccaccdf7e0523042dec4b9fca0b7d7f7fed39cd4a34d4
MD5 9d6248c952ad3849465e67e0f70b3970
BLAKE2b-256 60d93b0fbfeb90ef24feabe6af4e87bef624e8cb3c8cd5c0b7e31039528f83b7

See more details on using hashes here.

File details

Details for the file snapy-2.8.4-cp310-cp310-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for snapy-2.8.4-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 514dff3480007dee2a8b884ada744d54b10a95dba96ddbec2474cdf59a998b11
MD5 c73355aa2046a5e102c037550c142d19
BLAKE2b-256 e08a4ad5a65e6cb3579a8e9154c8cce406ae9277bf1e26708bac5a1f2f618971

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