Skip to main content

Compressible Finite Volume Solver for Atmospheric Dynamics, Chemistry and Thermodynamics

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.5-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.5-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.5-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.5-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.5-cp313-cp313-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for snapy-2.8.5-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 b02cdd31285fb875b830d532a582c26c0cc5b86a38691eaa7cb615a056ff0050
MD5 941d90bfe449c88d4533c07fb115141b
BLAKE2b-256 4e7b65a354663e618204c3cf63c8de98d38e2cb5c10d752dd0e19dc0860beb19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for snapy-2.8.5-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 834d1e14563ade5e50abe88032051045008ebdc0d64256ad1a54c65b9150b38f
MD5 5a532c39f6fe5b6d22a3207311701c1d
BLAKE2b-256 c704ba5a1e0094ac171b1af01c8752eb0f3f4a44c8c29f2ade5715110a0876b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for snapy-2.8.5-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 366bd1002ada9c515e1d6014fe83cbbd9305b7a2cf372eacf8afbbebbe275836
MD5 9fc49d3bddab9c2809cc75e406f587b2
BLAKE2b-256 386a9ca741dc7856d6e4defe39767766305c68c6af9344a16a0e5f1a0abf97ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for snapy-2.8.5-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 96f29e4b9ca70a6963857fd100d48551447cb3293cd60de8d26ae0234184ce75
MD5 b0c1b9aadd64e01fbe28b31a80898e60
BLAKE2b-256 2d9428de2ae21a77472fff2737853960e38f355f8fe26ccda4e79c1bcc52debd

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