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.8-cp313-cp313-manylinux_2_27_x86_64.whl (66.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

snapy-2.8.8-cp312-cp312-manylinux_2_27_x86_64.whl (66.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

snapy-2.8.8-cp311-cp311-manylinux_2_27_x86_64.whl (66.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

snapy-2.8.8-cp310-cp310-manylinux_2_27_x86_64.whl (65.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

File details

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

File metadata

File hashes

Hashes for snapy-2.8.8-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 7115467a8bc48827c31e667b7db10220afb39372459c5f26a68bcb8f1a48caa2
MD5 17301647009ef5b2a6657a6f7a636f02
BLAKE2b-256 f2cd3c7ece2a0c0ed6f1e120d5d339764606a3648f04f200b96f3e1f271424e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for snapy-2.8.8-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 2ca685ea55832036a15aac99a1acd763a87326c8844417146b9ef4af2142ec58
MD5 a0ec8ba0cab61229646e464c7d9a3bb5
BLAKE2b-256 25a1b21c77ee812ca21e2fa9b76dda684430ab17ed0561127ea205d226dcdd89

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for snapy-2.8.8-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 36f59bd1f4397b8e08fdbd496db8eeef2e85a8d7f5c5bce9e08d180f9c91290b
MD5 bc8de3b0e1cd426fb63e3213b658957e
BLAKE2b-256 600fe14e21e38df623670b6cfabffa602d4b225e81992546b6c13dc16f94846f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for snapy-2.8.8-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 06408d205adc9834eae4b3f50500568eea6b55592368a901641d9422e6cd7abf
MD5 9b59d2acb89c9ba259025692b831bb25
BLAKE2b-256 36259ffd2d146609154c2fb116a2d89d77dd6cdc78f03024747bb370b6667af4

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