Metadata-Version: 2.4
Name: cfdrs-python
Version: 0.3.0
Classifier: Programming Language :: Rust
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: License :: OSI Approved :: MIT License
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Topic :: Scientific/Engineering :: Physics
Requires-Dist: numpy>=1.21
Requires-Dist: pytest>=7.0 ; extra == 'dev'
Requires-Dist: matplotlib>=3.5 ; extra == 'dev'
Requires-Dist: pandas>=1.3 ; extra == 'dev'
Requires-Dist: numpy>=1.21 ; extra == 'validation'
Requires-Dist: matplotlib>=3.5 ; extra == 'validation'
Requires-Dist: pandas>=1.3 ; extra == 'validation'
Requires-Dist: scipy>=1.7 ; extra == 'validation'
Requires-Dist: jupyter>=1.0 ; extra == 'validation'
Provides-Extra: dev
Provides-Extra: validation
Summary: Python bindings for CFD-rs CFD solvers
Home-Page: https://ryancinsight.github.io/CFDrs/
Author-email: Ryan Clanton <ryan@clanton.dev>
License: MIT OR Apache-2.0
Requires-Python: >=3.9
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Documentation, https://ryancinsight.github.io/CFDrs/
Project-URL: Homepage, https://ryancinsight.github.io/CFDrs/
Project-URL: Repository, https://github.com/ryancinsight/CFDrs

# cfdrs-python

Python bindings for CFD-rs: High-performance computational fluid dynamics in Rust, exposed via [PyO3](https://pyo3.rs/) and [Maturin](https://www.maturin.rs/).

The wheel includes `cfd_python.pyi` and the PEP 561 `py.typed` marker. The
long-running 1D bifurcation and legacy 2D Poiseuille calls convert Python
inputs before releasing the GIL around their Rust solver work.

The PyPI distribution is `cfdrs-python`; the Rust package is `cfd-python` and
the Python module is `cfd_python`.

## Installation

```bash
cd crates/cfd-python
pip install maturin
maturin develop              # Development mode (editable install)
# or
maturin build --release      # Production wheel
pip install target/wheels/cfdrs_python-*.whl
```

Optional dependencies:

```bash
pip install "cfdrs-python[dev]"         # pytest, matplotlib, pandas
pip install "cfdrs-python[validation]"  # adds scipy and jupyter
```

## Quick Start

```python
import cfd_python

# 1D bifurcation solver
bifurc = cfd_python.BifurcationSolver(
    d_parent=100e-6,
    d_daughter1=80e-6,
    d_daughter2=80e-6,
)
blood = cfd_python.CassonBlood()
result = bifurc.solve(flow_rate=3e-8, pressure=40.0, blood=blood)
print(f"Pressure drop 1: {result.dp_1:.2f} Pa")
print(f"Wall shear rate 1: {result.gamma_1:.2f} s⁻¹")
```

## Available Classes

### 1D Solvers
| Class | Description |
|---|---|
| `BifurcationSolver` / `BifurcationResult` | Single bifurcation network |
| `TrifurcationSolver` / `TrifurcationResult` | Trifurcation network |
| `SerpentineSolver1D` / `SerpentineResult1D` | Serpentine channel resistance |
| `VenturiSolver1D` / `VenturiResult1D` | Venturi constriction resistance |

### 2D Solvers
| Class | Description |
|---|---|
| `PoiseuilleSolver` / `PoiseuilleResult` / `PoiseuilleConfig` | Poiseuille pipe flow |
| `Poiseuille2DSolver` / `Poiseuille2DResult` | 2D Poiseuille flow |
| `VenturiSolver2D` / `VenturiResult2D` | 2D Venturi constriction |
| `TrifurcationSolver2D` / `TrifurcationResult2D` | 2D trifurcation |
| `BifurcationSolver2D` / `BifurcationResult2D` | 2D bifurcation |
| `CavitySolver2D` / `CavityResult2D` | Lid-driven cavity (Ghia benchmark) |

### 3D Solvers
| Class | Description |
|---|---|
| `Bifurcation3DSolver` / `Bifurcation3DResult` | 3D FEM bifurcation |
| `Trifurcation3DSolver` / `Trifurcation3DResult` | 3D FEM trifurcation |
| `Poiseuille3DSolver` / `Poiseuille3DResult` | 3D Poiseuille flow |
| `Venturi3DSolver` / `Venturi3DResult` | 3D Venturi constriction |
| `Serpentine3DSolver` / `Serpentine3DResult` | 3D serpentine channel |

### Blood Rheology Models
| Class | Description |
|---|---|
| `CassonBlood` | Casson non-Newtonian model |
| `CarreauYasudaBlood` | Carreau-Yasuda shear-thinning model |
| `CrossBlood` | Cross model |
| `FahraeuasLindqvist` | Fåhraeus-Lindqvist effect |

### Pulsatile Flow
| Class | Description |
|---|---|
| `WomersleyNumber` | Womersley number calculation |
| `WomersleyProfile` | Velocity profile for pulsatile flow |
| `WomersleyFlow` | Full pulsatile flow solution |

## Features

- 1D/2D/3D CFD solvers unified under a single Python module
- Non-Newtonian blood rheology (Casson, Carreau-Yasuda, Cross, Fåhraeus-Lindqvist)
- Pulsatile Womersley flow
- Lid-driven cavity benchmark (Ghia et al.)
- Validated against analytical solutions

## Documentation

See the `crates/cfd-validation/` directory in the monorepo for comprehensive validation examples.

