Skip to main content

Python interface for building, running, and analyzing CFAST fire simulation models

Project description

PyCFAST

CI Status Docs pre-commit.ci status uv Ruff MyPy Checked PyPI - Python Version Conda Version codecov License: MIT DOI

PyCFAST is a Python interface for the Consolidated Fire and Smoke Transport (CFAST) fire simulation software. Its primary goal is to automate CFAST calculations, run parametric studies, sensitivity analyses, data generation, or optimization loops that would be impractical through the graphical interface (CEdit). It also provides a convenient way to create CFAST input files, execute simulations, and analyze results using the versatility and extensive ecosystem of Python.

From CEdit GUI to Python

PyCFAST can be seen as an alternative to the CFAST graphical interface, CEdit. It exposes Python objects that integrate naturally into your Python workflow. Instead of relying on modifying input files through the GUI, you define and manipulate CFAST models programmatically.

CEdit (GUI) PyCFAST (Python)
CEdit Compartment Tab
from pycfast import Compartment

room = Compartment(
    id="Comp 1",
    width=10.0,
    depth=10.0,
    height=10.0,
    ceiling_mat_id="Gypboard",
    wall_mat_id="Gypboard",
    floor_mat_id="Gypboard",
)

Example Usage

This minimal model runs with just a title and one compartment with default values:

from pycfast import CFASTModel, Compartment, SimulationEnvironment

model = CFASTModel(
    simulation_environment=SimulationEnvironment(title="My Simulation"),
    compartments=[Compartment()],
    # you can also add: fires, wall_vents, ceiling_floor_vents, mechanical_vents, ...
    file_name="my_simulation.in",
)
model.summary()
model.save()

For a full model with all components:

from pycfast import (
    CeilingFloorVent,
    CFASTModel,
    Compartment,
    Fire,
    Material,
    MechanicalVent,
    SimulationEnvironment,
    WallVent,
)

model = CFASTModel(
    simulation_environment=SimulationEnvironment(...),
    material_properties=[Material(...)],
    compartments=[Compartment(...)],
    wall_vents=[WallVent(...)],
    ceiling_floor_vents=[CeilingFloorVent(...)],
    mechanical_vents=[MechanicalVent(...)],
    fires=[Fire(...)],
    file_name="test_simulation.in",
)

Or you can import your existing model from a CFAST input file:

from pycfast.parsers import parse_cfast_file

model = parse_cfast_file("existing_model.in")

Then you can run the model and obtain results as pandas DataFrames:

results = model.run()
# results is a dict of pandas DataFrames
# Available keys: compartments, devices, masses, vents, walls, zone

results["compartments"].head()
#   Time    ULT_1   LLT_1   HGT_1  VOL_1  PRS_1  ...
# 0  0.0    20.00   20.00    5.00   0.01    0.0   ...
# 1  1.0    20.83   20.00    5.00   0.10    0.0   ...

results["devices"].head()
#   Time  TRGGAST_1  TRGSURT_1  TRGINT_1  TRGFLXI_1  ...
# 0  0.0      20.0       20.0      20.0       0.0    ...
# 1  1.0      20.0       20.0      20.0       0.38   ...

Note: When importing an existing model, ensure that all component names (such as TITLE, MATERIAL, ID, etc.) use only alphanumeric characters. Avoid special characters like quotes and slashes, as these may cause parsing issues and will be automatically sanitized where possible.

You can also inspect the model using text-based methods:

print(model.summary())   # text summary to stdout
model.save()      # writes the CFAST input file to disk
model.view_cfast_input_file()  # view the generated input file

Check out the examples for more usage scenarios.

Installation

PyCFAST requires Python 3.10 or later. It is fully tested on verification input files from CFAST version 7.7.0 to version 7.7.5.

Pip or Conda

PyCFAST can be installed from PyPI or conda-forge:

pip install pycfast
conda install -c conda-forge pycfast

Source

To install PyCFAST from source, clone the repository and install the required dependencies:

git clone https://github.com/bewygs/pycfast.git
cd pycfast
python -m pip install .

CFAST Installation

Download and install CFAST from the NIST CFAST website or the CFAST GitHub repository. Follow the installation instructions for your operating system and ensure cfast is available in your PATH. If CFAST is installed in a non-standard location, you can manually specify the path with these methods:

  • From an environment variable CFAST:

    export CFAST="/path/to/your/cfast/executable"  # Linux/MacOS
    set CFAST="C:\path\to\your\cfast\executable"  # Windows (cmd)
    $env:CFAST="C:\path\to\your\cfast\executable"  # Windows (PowerShell)
    
  • From Python code when defining the CFASTModel:

    from pycfast import CFASTModel
    
    # set custom CFAST executable path via environment variable
    import os
    os.environ['CFAST'] = "/path/to/your/cfast/executable"
    
    # Or directly when defining CFASTModel
    model = CFASTModel(
            ...,
            cfast_exe="/path/to/your/cfast/executable"
        )
    

Documentation

Full documentation, including the API reference and examples, is available online: PyCFAST Documentation

Contributing

We welcome contributions! Please see our Contributing Guide for more information.

References

If you use PyCFAST in your projects, please consider citing the following:

@software{wygas_2026_pycfast,
  author    = {Wygas, Benoît},
  title     = {PyCFAST},
  year      = {2026},
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.18703351},
  url       = {https://doi.org/10.5281/zenodo.18703351}
}

Acknowledgments

This Python package was developed with the support of Orano.

Orano logo

PyCFAST is built on top of the work of the CFAST development team at the National Institute of Standards and Technology (NIST). We acknowledge their ongoing efforts in maintaining and improving the CFAST fire modeling software.

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

pycfast-0.2.0.tar.gz (174.1 kB view details)

Uploaded Source

Built Distribution

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

pycfast-0.2.0-py3-none-any.whl (176.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pycfast-0.2.0.tar.gz
Algorithm Hash digest
SHA256 906d9a09e02573cbde72445fb36c7f7ecfd321c4e62214f0c1b2dc6f80a52dd5
MD5 ecea1d8e6a3f4e2c60f27984809d3f58
BLAKE2b-256 0490e3a7f397b8265a5e7e370cf4875cce1592cbda7da2004e54e623f7d033cd

See more details on using hashes here.

Provenance

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

Publisher: python-publish.yml on bewygs/pycfast

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

File details

Details for the file pycfast-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: pycfast-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 176.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pycfast-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 15d40d2e3de7d812f0528225b2d3e96ab078a4429926ac186f5be3154cf27269
MD5 b78cf3f9f291239f0e83afb7e0d3c3ae
BLAKE2b-256 2a3c9d1f47b27340a1d671fe8b0da2628f30be889e83e18052a7547cc0d09857

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycfast-0.2.0-py3-none-any.whl:

Publisher: python-publish.yml on bewygs/pycfast

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