Fire Sources¶
Learn how to create and configure fire sources in FDS simulations.
Overview¶
Fire sources in FDS are created by applying fire surfaces to obstructions or vents. The fire is defined by its heat release rate per unit area (HRRPUA).
from pyfds.core.namelists import Surface, Obstruction
from pyfds.core.geometry import Bounds3D
# Create fire surface
sim.add(Surface(id='FIRE', hrrpua=1000.0, color='RED'))
# Apply to obstruction
sim.add(Obstruction(xb=Bounds3D.of(2, 3, 2, 3, 0, 0.1), surf_id='FIRE'))
Basic Fire Surface¶
Simple Fire¶
sim.add(Surface(
id='BURNER',
hrrpua=1000.0, # Heat release rate per unit area (kW/m²)
color='RED' # Visualization color
)
# Apply to 1m x 1m burner
sim.add(Obstruction(xb=Bounds3D.of(2, 3, 2, 3, 0, 0.1), surf_ids=('BURNER', 'INERT', 'INERT')))
Total HRR = HRRPUA × Area = 1000 kW/m² × 1 m² = 1000 kW
Fire Intensity Levels¶
| Fire Type | HRRPUA (kW/m²) | Description |
|---|---|---|
| Small | 250 - 500 | Smoldering, paper fire |
| Medium | 500 - 1000 | Wood crib, office materials |
| Large | 1000 - 2000 | Pool fire, intense burning |
| Very Large | 2000 - 5000 | Liquid fuel pool |
Time-Varying Fires¶
Create a fire that grows over time:
# Define fire growth ramp
sim.add(Ramp(
id='FIRE_GROWTH',
t=[0, 60, 120, 180, 300],
f=[0.0, 0.25, 0.5, 1.0, 1.0]
)
# Fire surface with ramp
sim.add(Surface(
id='GROWING_FIRE',
hrrpua=2000.0,
ramp_q='FIRE_GROWTH'
)
See RAMP Guide for more time-varying options.
Fire Geometries¶
Square Burner¶
Circular Burner¶
sim.add(Vent(
xb=Bounds3D.of(-1, 1, -1, 1, 0, 0),
surf_id='FIRE',
xyz=Point3D.of(0, 0, 0),
radius=0.5
)
Multiple Fires¶
sim.add(Obstruction(xb=Bounds3D.of(1, 2, 1, 2, 0, 0.1), surf_ids=('FIRE', 'INERT', 'INERT')))
sim.add(Obstruction(xb=Bounds3D.of(3, 4, 3, 4, 0, 0.1), surf_ids=('FIRE', 'INERT', 'INERT')))
Complete Example¶
from pyfds import Simulation
from pyfds.core.namelists import Time, Mesh, Ramp, Surface, Obstruction
from pyfds.core.geometry import Bounds3D, Grid3D
sim = Simulation(chid='fire_demo')
sim.add(Time(t_end=300.0))
sim.add(Mesh(ijk=Grid3D.of(50, 50, 25), xb=Bounds3D.of(0, 5, 0, 5, 0, 2.5)))
# Growing fire
sim.add(Ramp(id='GROWTH', t=[0, 60, 180], f=[0, 0.3, 1.0]))
sim.add(Surface(id='FIRE', hrrpua=1500.0, ramp_q='GROWTH', color='ORANGE'))
sim.add(Obstruction(xb=Bounds3D.of(2, 3, 2, 3, 0, 0.1), surf_ids=('FIRE', 'INERT', 'INERT')))
sim.write('fire_demo.fds')
Next Steps¶
- Devices & Measurement - Monitor fire effects
- RAMP Guide - Time-varying properties
- Examples - Complete scenarios