Skip to main content

peclet.flow — Kokkos cut-cell IBM incompressible Navier-Stokes solver (+ pnm pore extraction)

Project description

flow

PyPI version Python versions License: MIT CI

GPU-accelerated incompressible Navier–Stokes solver for flow in complex geometry, built around a staggered MAC grid, a signed-distance-field (SDF) description of the solid, a cut-cell Immersed Boundary Method, and a pressure-projection step with a geometric multigrid Poisson solve. The code is written in Kokkos C++ (one source runs on the CUDA, HIP/AMD, and OpenMP backends, selected at build time) and exposed to Python through nanobind (zero-copy, on core's View↔ndarray bridge); simulations are driven from Python.

The repository is also known as pnm_from_sdf (its GitLab origin) — it computes pore-network–scale flow directly from segmented SDF geometry.

Modules

Module Role
flow The CFD solver — a distributed (MPI-optional) GPU cut-cell IBM Navier–Stokes solver in physical units, built on the shared core block-decomposition + async halo layer. One code / one API / MPI-optional, with native domain boundary conditions. Exposes peclet.flow.Solver (staggered MAC, default) and peclet.flow.SolverColocated (collocated/cell-centered velocities, ABC approximate projection) — identical API via a GridLayout policy. Validated against analytics and Zick & Homsy sphere-array drag (scripts/validate_zick_homsy_sdflow.py).
pnm Pore-network extraction — SDF VTI reading + pore/segmentation/topology extraction (SDFReader, extract_pores, segment_volume, extract_topology_gpu). The repo's namesake "pnm_from_sdf" feature.

The original CUDA implementation has been retired (Kokkos became canonical, 2026-06); flow was validated bit-identical to the CUDA solver — to machine precision, and against Zick & Homsy sphere-array drag — before the CUDA sources were deleted (restore point: git tag pre-cuda-retirement). The shared cut-cell IBM primitives now live in src/cut_cell_ibm.hpp; the operator headers are src/mac_*.hpp + src/flow_ibm.hpp.

Capabilities

  • Geometry: SDF solids (negative inside); the cut-cell IBM applies a Robust-Scaled no-slip / moving-wall condition and a matching cut-cell pressure operator (face openness from the SDF).
  • Native domain boundary conditions (flow): per-face periodic / no-slip wall / Dirichlet velocity (inflow) / outflow, plus per-position inlet velocity profiles. Validated on the lid-driven cavity (Ghia et al.), the developing plane channel (Poiseuille), and the backward-facing step (Armaly/Gartling).
  • Pressure multigrid: rediscretized geometric V-cycle, grid-independent, with MG-PCG and Chebyshev outer accelerators. Works on periodic, IBM, and non-periodic (BC) domains, including semi-coarsening for thin (quasi-2D) grids.
  • Time integration: pressure projection with optional incremental pressure, explicit (Koren) or implicit-deferred-correction advection, and Picard outer iteration.

Build

# Canonical: build + install both modules via scikit-build-core
CMAKE_PREFIX_PATH="$PWD/../extern/install/<backend>" pip install .   # -> flow + pnm
# Or a dev cmake build (nanobind found via the active interpreter, no cmakedir needed):
cmake -S . -B build -DCMAKE_PREFIX_PATH="$PWD/../extern/install/<backend>" && cmake --build build -j
# distributed flow build (opt-in MPI):
cmake -S . -B build_mpi -DCFD_BUILD_MPI=ON -DCMAKE_PREFIX_PATH="$PWD/../extern/install/<backend>" \
  && cmake --build build_mpi -j

<backend> is one of nvidia-cuda / host-openmp / lumi-hip under ../extern/install/, produced once by ../tools/bootstrap_deps.sh (a hard build dependency). Requirements: a Kokkos backend (CUDA/HIP/OpenMP — CUDA is just one option, not required), a C++20 host compiler, nanobind + scikit-build-core, and — for distributed flow — MPI. Python dependencies live in a virtual environment (.venv).

Run / verify

Simulations are scripts, not C++ mains. The scripts/verify_*_sdflow.py files are the canonical verification entry points:

source .venv/bin/activate
python scripts/verify_lid_cavity_sdflow.py     # lid-driven cavity vs Ghia, Ghia & Shin (1982)
python scripts/verify_channel_sdflow.py        # developing plane channel -> Poiseuille
python scripts/verify_bfs_sdflow.py            # backward-facing step (reattachment length)
ctest --test-dir build_mpi --output-on-failure # the multi-rank C++ test suite

Documentation

API documentation (C++ classes/kernels and Python scripts) is generated with Doxygen and published to GitHub Pages by the Documentation CI workflow. Build it locally with:

doxygen docs/Doxyfile      # output in docs/html/index.html

The architecture, conventions, and design rationale are described in CLAUDE.md and the design notes under doc/ in the repository.

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

peclet_flow-0.2.0.tar.gz (427.7 kB view details)

Uploaded Source

Built Distributions

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

peclet_flow-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

peclet_flow-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

peclet_flow-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

peclet_flow-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

File details

Details for the file peclet_flow-0.2.0.tar.gz.

File metadata

  • Download URL: peclet_flow-0.2.0.tar.gz
  • Upload date:
  • Size: 427.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for peclet_flow-0.2.0.tar.gz
Algorithm Hash digest
SHA256 6c8fb4242d0be1c226d13c268522df455cd8d56548bbf2d06245a05f5b765d9a
MD5 e7287e5ae2de3791c01e369fd2679057
BLAKE2b-256 de3e388998edb9c8800e64902848bbd1df41a485df0e7ca5037a1e70fae1b42f

See more details on using hashes here.

Provenance

The following attestation bundles were made for peclet_flow-0.2.0.tar.gz:

Publisher: release.yml on computational-chemical-engineering/peclet-flow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file peclet_flow-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for peclet_flow-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fbb95ae1a7beb7b31e10996fb3b437e1f766f19134d64204b5531dd080054267
MD5 c162e5f058af328c6d6b8698d7155100
BLAKE2b-256 979369af968d537da2404ea31b4adb3a2e8ae49542121d1082c3ef007759b5d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for peclet_flow-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: release.yml on computational-chemical-engineering/peclet-flow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file peclet_flow-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for peclet_flow-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bcfa6a5d1ee6732fde66a82de0d251b29498b1fed24fa7f13b61c5568c293b25
MD5 909a2901a3958d7df53b3aeed440e901
BLAKE2b-256 0f3205201bd46f5b2793fed931b1056a2b0d0e1a2c8b7e4536b53eaa81aa18c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for peclet_flow-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: release.yml on computational-chemical-engineering/peclet-flow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file peclet_flow-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for peclet_flow-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f7ebdffb9d6c0da609d9dd561ee01cf2402743314b1ef1260707f1477c4e8396
MD5 ac23e51f5a8d1a81ca355fb281de6793
BLAKE2b-256 70d432b4e79290e841164e64fdcd2b15f79dee01592ab6fbd59368f092a7b60e

See more details on using hashes here.

Provenance

The following attestation bundles were made for peclet_flow-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: release.yml on computational-chemical-engineering/peclet-flow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file peclet_flow-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for peclet_flow-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5a6d6317cd2035b3b63146e55a56ff52edaa5a97434103105a5af1db11cb3e0d
MD5 3d98417bd65a69d5713147e48dabf8a5
BLAKE2b-256 3e6a92a1028d24755baae29cbd87244a7f38d50021b0d0c6fa073a59e532365f

See more details on using hashes here.

Provenance

The following attestation bundles were made for peclet_flow-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: release.yml on computational-chemical-engineering/peclet-flow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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