
A Python library that couples a finished Fire Dynamics Simulator run to
JuPedSim agents: smoke slows them, dose stops them, smoke along a route
changes their exit, and sign legibility decides which exits they know.
Extinction coefficient reduces walking speed with the Frantzich–Nilsson law (the linear FDS+Evac law), or the fridolf option (Fridolf et al. 2019, Eq. 7), from Python, with an optional irritant slowdown.
Purser fractional effective dose as computed by FDS+Evac (the FED function of FDS), from up to 12 gas species, plus an opt-in convective heat dose accumulated separately. By default every agent stops at FED 1, as in FDS+Evac.
Optical depth integrated along the route the agent will actually walk refuses exits and orders the rest. Re-decided every second by default in run.py.
fdsvismap decides which signs an agent can read through smoke. What it reads enters its cognitive map; fully familiar agents know the building, discovery agents learn it.
Each model checked against hand calculations, published tables and FDS’s own output, one page per test with the setup, the expected value and the simulated result.
FDS runs once. Egress reads the stored slices through one sampling interface, so a synthetic field replaces FDS in tests and routing sweeps never re-run the fire.
Script, test, command line, and the optional web GUI all call the same run_scenario(); run.py and the GUI also build the same models for it. Results are a JuPedSim trajectory file plus per-agent CSV histories.
pyFDS-Evac is installed from the repository until the PyPI release, which waits on an upstream fdsvismap merge. Requirements (Python 3.11 or 3.12, uv, git) and a check that the install works are on the Install page.
pip install "pyfds-evac @ git+https://github.com/PedestrianDynamics/pyFDS-Evac.git"The examples and the tracked scenarios live in the repository (examples/,
assets/), not in the installed package. To run them, clone the repository and
use uv:
git clone https://github.com/PedestrianDynamics/pyFDS-Evac.git
cd pyFDS-Evac
uv sync
uv run python run.py --scenario assets/ISO-table21 --cleanupBringing your own FDS case? Read what your FDS case must provide first: pyFDS-Evac does not run FDS, it samples the output of a finished run, and the deck has to dump specific slices for that to work.
| Library | Role |
|---|---|
| FDS | Fire physics. Writes slices: extinction coefficient, temperature, CO, CO₂, O₂, HCN, irritants. |
| fdsreader | Nearest-neighbour lookup of any slice quantity at a time and position. |
| fdsvismap | Per sign and time: which floor cells can read it, Beer–Lambert along the sight line. |
| pyFDS-Evac | Speed factor, dose, route ranking, cognitive maps. Decides where each agent goes and how fast. |
| JuPedSim | Moves agents collision-free on the walkable area. |
pyFDS-Evac adds no movement model and no fire model.
For the ideas behind speed, route choice and wayfinding, read Concepts and the talk A Modular Workflow for Visibility-Aware Evacuation Modelling.