1. Baseline Airbag Inflation Model Setup
Why a Baseline Model Comes First
Every optimization study needs a fixed reference point. Before sweeping vent diameters or calibrating a gas generator, you need a model that is simple enough to reason about, yet faithful enough that its outputs — peak bag pressure and fill time — respond to parameter changes in a physically meaningful way. This case builds that reference: a single gas generator feeding a single airbag volume through a single vent hole, described by a lumped-parameter (0-D) control-volume model.
The lumped-parameter assumption treats the bag as one uniform pressure and temperature state. That is a deliberate simplification: it discards spatial gradients and fabric folding, but it preserves the two quantities that dominate occupant-restraint performance — how fast the bag fills and how high the pressure peaks. For a baseline, this is the right trade-off.
Model Structure and Governing Equations
The model has three coupled states: gas mass in the bag m [kg], bag internal energy U [J], and bag volume V [m³]. The gas generator supplies mass at a prescribed rate; the vent hole removes mass; the bag volume grows as pressure acts on the fabric.
Mass balance:
dm/dt = mdot_gen(t) - mdot_vent(t)
Vent flow is modeled as compressible orifice flow. For the subsonic branch (bag pressure p above ambient p_amb but below the critical ratio):
mdot_vent = Cd * A_vent * p / sqrt(R * T) * sqrt( 2*gamma/(gamma-1) * ( (p_amb/p)^(2/gamma) - (p_amb/p)^((gamma+1)/gamma) ) )
When p_amb/p <= (2/(gamma+1))^(gamma/(gamma-1)) the flow is choked and the bracket collapses to the critical-flow constant. Energy balance with an ideal-gas closure gives temperature, and pressure follows from the ideal gas law:
p = m * R * T / V
Volume growth is driven by the pressure difference across the fabric, integrated against an effective stiffness:
dV/dt = (p - p_amb) / K_eff (while p > p_amb, else 0)
This is a first-order fill law, not a membrane solve — appropriate for a baseline where the goal is a stable, tunable reference rather than fabric-accurate deployment.
Baseline Parameters
The table below defines the reference parameter set. These are teaching values chosen to produce a physically plausible fill in the 30–60 ms range; they are not measured data from a specific inflator.
| Symbol | Parameter | Baseline value | Unit |
|---|---|---|---|
m_total | Total gas generator mass | 0.060 | kg |
t_burn | Burn duration | 0.040 | s |
mdot_gen | Generator mass flow (constant) | 1.50 | kg/s |
A_vent | Vent hole area | 3.0e-4 | m² |
Cd | Vent discharge coefficient | 0.80 | – |
V_0 | Initial bag volume | 0.005 | m³ |
K_eff | Effective fill stiffness | 2.0e5 | Pa·s/m³ |
T_gas | Generator gas temperature | 900 | K |
R | Specific gas constant | 287 | J/(kg·K) |
gamma | Ratio of specific heats | 1.40 | – |
p_amb | Ambient pressure | 101325 | Pa |
Reference Implementation
The model is small enough to integrate with an explicit fixed-step solver. The code below is self-contained: it defines the parameters, the derivative function, a forward-Euler integrator, and the two metrics the baseline must record.
import math
# --- Baseline parameters ---
m_total = 0.060 # kg
t_burn = 0.040 # s
mdot_gen = m_total / t_burn
A_vent = 3.0e-4 # m^2
Cd = 0.80
V0 = 0.005 # m^3
K_eff = 2.0e5 # Pa*s/m^3
T_gas = 900.0 # K
R = 287.0 # J/(kg*K)
gamma = 1.40
p_amb = 101325.0 # Pa
def vent_mass_flow(p, T):
if p <= p_amb:
return 0.0
ratio = p_amb / p
crit = (2.0 / (gamma + 1.0)) ** (gamma / (gamma - 1.0))
if ratio <= crit:
# choked flow
term = math.sqrt(gamma / (R * T)) * (2.0 / (gamma + 1.0)) ** ((gamma + 1.0) / (2.0 * (gamma - 1.0)))
else:
term = math.sqrt(2.0 * gamma / ((gamma - 1.0) * R * T) *
(ratio ** (2.0 / gamma) - ratio ** ((gamma + 1.0) / gamma)))
return Cd * A_vent * p * term
def derivatives(t, m, T, V):
mdot_in = mdot_gen if t < t_burn else 0.0
mdot_out = vent_mass_flow(m * R * T / V, T)
dm = mdot_in - mdot_out
# energy: generator gas enters at T_gas, vent removes at bag T
cp = gamma * R / (gamma - 1.0)
dU = mdot_in * cp * T_gas - mdot_out * cp * T
# ideal gas: U = m * cv * T -> dT from dU and dm
cv = R / (gamma - 1.0)
dT = (dU - cv * T * dm) / (m * cv)
p = m * R * T / V
dV = (p - p_amb) / K_eff if p > p_amb else 0.0
return dm, dT, dV
def simulate(dt=1e-5, t_end=0.120):
m, T, V = 1e-6, 300.0, V0
t, p_peak, t_fill = 0.0, 0.0, None
V_target = 0.060 # 60 L deployed volume
while t < t_end:
dm, dT, dV = derivatives(t, m, T, V)
m += dm * dt; T += dT * dt; V += dV * dt
t += dt
p = m * R * T / V
p_peak = max(p_peak, p)
if t_fill is None and V >= V_target:
t_fill = t
return p_peak, t_fill
p_peak, t_fill = simulate()
print(f"peak pressure = {p_peak/1000:.1f} kPa")
print(f"fill time = {t_fill*1000:.1f} ms")
Run this and you obtain the two baseline numbers. With the parameters above, the expected output is on the order of peak pressure ≈ 210–230 kPa and fill time ≈ 35–45 ms. These are illustrative results from the stated inputs, not measured inflator data — treat them as the reference your later sweeps will move away from.
1e-6 kg and temperature 300 K avoid a divide-by-zero in the temperature derivative at t=0. Keep them small but nonzero; setting them to exactly zero will produce NaN on the first step.Reading the Baseline Behavior
The SVG below shows the coupled signal path and the expected qualitative shape of the two recorded metrics. The key structural insight is that the generator and the vent act on the same mass state in opposition: the generator raises mass and temperature, the vent removes mass and carries away enthalpy, and the volume growth converts pressure into displacement. Peak pressure occurs near the end of the burn, when inflow is still high but the vent has not yet caught up; fill time is governed by the integral of volume growth, which lags pressure because dV/dt depends on the pressure excess over ambient.
Verification and Failure Symptoms
A baseline is only useful if it is stable and reproducible. Check three things before accepting it as the reference:
- Step-size independence. Halve
dtfrom1e-5to5e-6; peak pressure and fill time should change by less than about 1%. If they drift more, the explicit Euler step is too coarse for the burn transient. - Mass conservation. At
t = t_end, the mass remaining in the bag plus the mass vented should equalm_totalto within numerical tolerance. A mismatch points to a sign error in the vent term. - Monotonic volume.
Vshould never decrease whilep > p_amb. A decreasing volume means the pressure-excess term is being applied with the wrong sign.
NaN on the first step (zero initial mass or temperature); pressure that rises without bound (vent flow returning zero because p <= p_amb is evaluated before the pressure is updated); fill time reported as None (target volume never reached — check K_eff and V_target are consistent).Baseline Record Card
Record the following so every later case has a fixed comparison point. Fill in the values your run produces.
| Field | Value to record |
|---|---|
| Model type | 0-D lumped control volume, single generator, single vent |
| Integrator | Forward Euler, dt = 1e-5 s, t_end = 0.120 s |
| Peak bag pressure | ______ kPa (expected ≈ 210–230) |
| Fill time to 60 L | ______ ms (expected ≈ 35–45) |
| Mass balance residual | ______ kg (should be ≈ 0) |
| Step-size check | Δp_peak < 1% at dt/2: pass / fail |
Once these numbers are recorded and the three checks pass, the baseline is locked. Any later change to vent area, generator profile, or stiffness is measured against this card, which is exactly what makes the following optimization cases interpretable.