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.
- 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
The easiest way to get started is to install via pip:
pip install snapyThis will install the Python interface with pre-built binaries for Python 3.9-3.13 on Linux (x86_64) and macOS (ARM64).
pd-run 6 ./test_exchange.release
lsof -i:29500pkill -9 XXXXXRequirements:
- Python 3.9 or higher
- PyTorch 2.7.x
- NumPy
- kintera >= 1.1.5
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
- PyTorch 2.7.x with C++ libraries
- NetCDF C library
- kintera >= 1.1.5
Build steps:
- Clone the repository:
git clone https://github.com/chengcli/snapy.git
cd snapy- Install dependencies:
pip install numpy kintera torch==2.7.1-
Install NetCDF:
- Linux (Ubuntu/Debian):
sudo apt-get install libnetcdf-dev
- macOS:
brew install netcdf
- Linux (Ubuntu/Debian):
-
Install NCCL (if enables GPU)
- Linux (Ubuntu/Debian):
sudo apt-get install libnccl2 libnccl-dev
- Linux (CentOS/RHEL):
sudo yum install libnccl libnccl-devel libnccl-static
- Configure and build:
cmake -B build -DCMAKE_BUILD_TYPE=Release -DNETCDF=ON
cmake --build build --parallel 3- Install the Python package:
pip install .The examples/ directory contains several working examples:
Python Examples:
shock.py- Sod shock tube with internal boundarystraka.py- Straka cold bubble convection testrobert.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.pyRun a C++ example (after building):
cd build/examples
./shockSee examples/README for detailed documentation on the code structure and available examples.
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.
Run tests after building:
cd build/tests
ctest --output-on-failureThis project is licensed under the MIT License - see the LICENSE file for details.
- Author: Cheng Li
- Email: chengcli@umich.edu
- GitHub: https://github.com/chengcli/snapy