Advanced Chemistry Guide¶
This guide covers advanced combustion chemistry modeling in pyfds, including two-step chemistry, product yields, extinction models, and detailed reaction mechanisms.
Overview¶
FDS supports sophisticated combustion chemistry through the REAC namelist, allowing you to model:
- Multi-step reaction mechanisms
- Detailed product yields
- Extinction and reignition
- Nitrogen and carbon chemistry
- Oxygen-limited combustion
Basic Reaction Setup¶
Single-Step Combustion¶
from pyfds import Simulation
from pyfds.core.namelists import Reaction
# Create simulation
sim = Simulation(chid="combustion", title="Combustion Chemistry Example")
# Define combustion reaction
methane_combustion = Reaction(
fuel="METHANE",
soot_yield=0.015, # Soot yield (kg/kg)
co_yield=0.001, # CO yield (kg/kg)
radiative_fraction=0.35 # Radiative fraction
)
sim.physics.add_reaction(methane_combustion)
Using ReactionBuilder¶
The ReactionBuilder provides a fluent API:
from pyfds.builders import ReactionBuilder
reaction = ReactionBuilder() \
.fuel("PROPANE") \
.soot_yield(0.015) \
.co_yield(0.001) \
.radiative_fraction(0.35) \
.build()
Two-Step Chemistry¶
Basic Two-Step Model¶
# Step 1: Fuel → CO + other products
step1 = Reaction(
fuel="FUEL",
co_yield=0.5, # High CO yield
soot_yield=0.01,
radiative_fraction=0.2
)
# Step 2: CO → CO2
step2 = Reaction(
fuel="CO",
co_yield=0.0, # Complete oxidation
soot_yield=0.005,
radiative_fraction=0.3
)
sim.physics.add_reaction(step1)
sim.physics.add_reaction(step2)
Advanced Two-Step Setup¶
# Detailed two-step chemistry
fuel_pyrolysis = Reaction(
id="FUEL_BREAKDOWN",
fuel="HYDROCARBON",
formula="C3 H8", # Chemical formula
co_yield=0.3,
soot_yield=0.02,
hcn_yield=0.001, # HCN yield for nitrogenous fuels
radiative_fraction=0.25
)
co_oxidation = Reaction(
id="CO_OXIDATION",
fuel="CO",
co_yield=0.0,
soot_yield=0.0,
radiative_fraction=0.4,
# Advanced parameters
epumo2=1.0, # Oxygen exponent
lower_oxygen_limit=0.01 # Extinction limit
)
sim.physics.add_reaction(fuel_pyrolysis)
sim.physics.add_reaction(co_oxidation)
Detailed Product Yields¶
Carbon and Nitrogen Chemistry¶
# Fuel with nitrogen content
coal = Reaction(
fuel="COAL_VOLATILES",
# Carbon fractions
carbon_fraction=0.8, # Carbon mass fraction
hydrogen_fraction=0.05, # Hydrogen mass fraction
oxygen_fraction=0.05, # Oxygen mass fraction
nitrogen_fraction=0.015, # Nitrogen mass fraction
# Yields
soot_yield=0.08,
co_yield=0.02,
hcn_yield=0.005,
# Combustion properties
heat_of_combustion_complete=32000.0, # kJ/kg
radiative_fraction=0.25
)
Atom Balance Checking¶
# FDS can check atom balance
reaction = Reaction(
fuel="C2H6",
formula="C2 H6", # Explicit formula
check_atom_balance=True, # Enable balance checking
soot_yield=0.01,
co_yield=0.005
)
Extinction and Reignition¶
Oxygen-Limited Combustion¶
# Extinction model
reaction = Reaction(
fuel="FUEL",
lower_oxygen_limit=0.05, # Extinction when O2 < 5%
epumo2=1.0, # Oxygen exponent
# Reignition parameters
ait_exclusion_zone=0.1 # Auto-ignition exclusion zone
)
Ventilation-Limited Burning¶
# Ventilation-controlled fire
reaction = Reaction(
fuel="FUEL",
# Extinction limits
lower_oxygen_limit=0.06,
critical_flame_temperature=1300.0, # K
# Heat release
heat_of_combustion_complete=40000.0
)
Advanced Reaction Parameters¶
Reaction Kinetics¶
# Detailed kinetics
reaction = Reaction(
fuel="FUEL",
# Kinetic parameters
n_simple_chemistry_reactions=2, # Number of reactions
# Heat release parameters
hoc_complete=44000.0, # Complete heat of combustion
# Advanced yields
so2_yield=0.001, # SO2 yield
hcl_yield=0.0005, # HCl yield
# Radiation
radiative_fraction=0.33
)
Fuel-Specific Properties¶
# Polymer combustion
plastic = Reaction(
fuel="PLASTIC_VAPOR",
# Composition
carbon_fraction=0.6,
hydrogen_fraction=0.08,
oxygen_fraction=0.22,
chlorine_fraction=0.1, # PVC-like
# Yields
soot_yield=0.05,
co_yield=0.01,
hcl_yield=0.08, # HCl from chlorine
# Combustion
heat_of_combustion_complete=18000.0,
radiative_fraction=0.3
)
Chemistry Validation¶
Consistency Checks¶
Pyfds validates reaction parameters:
- Fuel species must be defined in SPEC
- Yields must be physically reasonable (0-1)
- Atom balance when requested
- Cross-references to other reactions
Parameter Ranges¶
- Soot yield: 0.0 - 0.2 (kg/kg)
- CO yield: 0.0 - 0.5 (kg/kg)
- Radiative fraction: 0.2 - 0.5
- Heat of combustion: 10,000 - 50,000 kJ/kg
Best Practices¶
Choosing Chemistry Models¶
- Simple fuels: Single-step chemistry
- Complex fuels: Two-step chemistry
- Nitrogenous fuels: Include HCN yields
- Halogenated fuels: Include acid gas yields
Parameter Estimation¶
- Yields: Measure experimentally or use literature
- Heat of combustion: Use bomb calorimeter data
- Radiative fraction: Measure or correlate with soot
- Extinction limits: Use standard values
Common Issues¶
- Incorrect yields: Sum of yields should be reasonable
- Missing species: Define all referenced SPEC
- Atom imbalance: Check formulas and yields
- Convergence issues: Adjust extinction parameters
Examples¶
Methane Combustion¶
# Natural gas fire
methane = Reaction(
fuel="METHANE",
soot_yield=0.005,
co_yield=0.001,
radiative_fraction=0.34,
heat_of_combustion_complete=50000.0
)
Wood Pyrolysis Products¶
# Wood combustion
wood_gas = Reaction(
fuel="WOOD_GAS",
carbon_fraction=0.5,
hydrogen_fraction=0.06,
oxygen_fraction=0.44,
soot_yield=0.02,
co_yield=0.03,
radiative_fraction=0.25,
heat_of_combustion_complete=18000.0
)
Two-Step Diesel Combustion¶
# Diesel surrogate
diesel1 = Reaction(
id="DIESEL_PYROLYSIS",
fuel="DIESEL",
co_yield=0.4,
soot_yield=0.03,
radiative_fraction=0.2
)
diesel2 = Reaction(
id="SOOT_OXIDATION",
fuel="SOOT",
co_yield=0.0,
soot_yield=0.0,
radiative_fraction=0.4
)
Flame Extinction¶
# Extinction-capable reaction
reaction = Reaction(
fuel="FUEL",
lower_oxygen_limit=0.055, # 5.5% O2
epumo2=1.0,
critical_flame_temperature=1420.0, # K
ait_exclusion_zone=0.05
)
See the examples directory for complete combustion chemistry simulations.