3. Calibrate Mass Flow Rate of the Inflator
Why the Inflator Mass Flow Curve Is the Primary Calibration Lever
In an LS-DYNA frontal restraint model, the driver airbag is inflated by a pyrotechnic inflator whose output is described by a mass flow rate curve. The keyword *AIRBAG_SIMPLE_PRESSURE_VOLUME (or the more detailed *AIRBAG_HYBRID / *AIRBAG_WANG_NEFSKE family) accepts a table of mass flow rate versus time, typically defined through *DEFINE_CURVE. This curve, together with the bag volume, vent area, and fabric leakage, governs the internal pressure history p(t). Because occupant head acceleration is driven by the contact force between the head and the deploying bag, the mass flow curve is the most direct handle for shaping the pressure rise and therefore the head response.
The calibration task in this case is concrete: given a target bag pressure-time history (for example, a measured or reference curve from a validated test), adjust the inflator mass flow curve so the simulated pressure tracks the target within an acceptable tolerance, then quantify how that adjustment changes peak head acceleration. The two objectives are coupled — matching pressure does not automatically mean matching head acceleration, because timing and bag stiffness distribution also matter — so the workflow must report both.
Defining the Baseline and the Target
Start from the baseline model established in the previous case. The relevant entities are:
- The airbag part and its
*AIRBAG_*definition, which references a mass flow curve ID. - The inflator curve, e.g.
*DEFINE_CURVEwithLCID=101, giving(time, mass_flow_rate)pairs in kg/s. - A pressure measurement: an
*ELEMENT_SEATBELT_*-independent approach is to use*DATABASE_ASCIIwithABSTAToutput, or a control-volume pressure history written via*DATABASE_HISTORYon the airbag part. - Head acceleration from the dummy head CG accelerometer, output through
*DATABASE_ASCIINODOUTor the accelerometer definition.
Assume the target pressure history is a reference curve p_target(t) sampled at 1 ms intervals from 0 to 120 ms, peaking near 45 ms. The baseline simulated pressure typically rises too slowly or overshoots depending on the initial guess for the mass flow curve. The calibration adjusts the curve shape, not the total gas mass alone.
Structuring the Mass Flow Curve for Tuning
A raw pyrotechnic curve has a fast rise, a plateau, and a decay. Rather than editing dozens of points by hand, parameterize it with a small number of control parameters so the tuning is systematic:
t_rise— time to reach peak mass flow (ms).mdot_peak— peak mass flow rate (kg/s).t_decay— time constant of the post-peak decay (ms).m_total— total gas mass delivered (kg), which constrains the integral of the curve.
A practical parameterization is a rise-decay shape:
mdot(t) = mdot_peak * (t/t_rise) * exp(1 - t/t_rise) for t <= t_rise
mdot(t) = mdot_peak * exp(-(t - t_rise)/t_decay) for t > t_rise
This form peaks exactly at t_rise with value mdot_peak and decays smoothly. The total mass is the integral, which you can compute numerically and scale mdot_peak to hit m_total. Writing this as a small Python generator produces the *DEFINE_CURVE points directly:
import numpy as np
def inflator_curve(t_rise, mdot_peak, t_decay, t_end=120.0, dt=0.5):
t = np.arange(0.0, t_end + dt, dt)
mdot = np.where(
t <= t_rise,
mdot_peak * (t / t_rise) * np.exp(1.0 - t / t_rise),
mdot_peak * np.exp(-(t - t_rise) / t_decay),
)
mdot[0] = 0.0
return t, mdot
def total_mass(t, mdot):
return np.trapz(mdot, t)
t, mdot = inflator_curve(t_rise=8.0, mdot_peak=2.5, t_decay=25.0)
print("total mass (kg):", total_mass(t, mdot))
# write DEFINE_CURVE block
with open("inflator_curve.k", "w") as f:
f.write("*DEFINE_CURVE\n")
f.write("101,0,1.0,1.0,0.0,0.0,0.0,0.0\n")
for ti, mi in zip(t, mdot):
f.write(f"{ti:.3f},{mi:.5f}\n")
The generated file is included in the main deck via *INCLUDE. The airbag definition references LCID=101. This keeps the tuning loop clean: change four numbers, regenerate, rerun.
Calibration Loop Against the Target Pressure
Run the model, extract the bag pressure history, and compare to p_target(t). A simple and effective metric is the normalized RMS error over the inflation window:
import numpy as np
def pressure_error(t_sim, p_sim, t_tgt, p_tgt):
p_sim_i = np.interp(t_tgt, t_sim, p_sim)
err = np.sqrt(np.mean((p_sim_i - p_tgt) ** 2)) / np.max(p_tgt)
return err
Adjust the parameters in a small sequence rather than all at once, because they have distinct effects:
t_risecontrols how early the pressure builds; too large delays peak pressure and softens early head contact.mdot_peakscales the pressure magnitude; too high causes overshoot and a stiffer bag.t_decayshapes the post-peak pressure; too short causes premature deflation and bottom-out risk.m_totalsets the overall gas budget; it must remain physically plausible for the inflator class.
A practical sequence: first match the peak pressure timing by adjusting t_rise, then match peak magnitude with mdot_peak, then refine the decay with t_decay. Iterate two or three times. Report the pressure error after each iteration so the convergence is visible.
m_total within the inflator's rated gas output. If matching the target requires an implausible total mass, the discrepancy likely lies in vent area or bag volume, not the inflator — revisit those before forcing the curve.Reading the Result: Pressure Match Versus Head Acceleration
Once the pressure error is acceptably small (for example, below 5% normalized RMS), extract the head acceleration history and compare peak values and timing against the baseline. The key observation is that a pressure match does not guarantee an acceleration match: a curve that reaches the same peak pressure slightly earlier can increase head acceleration because the bag is stiffer at the moment of head contact. The figure below summarizes the calibration loop and the two coupled outputs that must both be checked.
Interpreting the Coupled Result
After convergence, tabulate the outcome so the trade-off is explicit. A representative result table (values are illustrative for this example, not measured data) might look like:
| Quantity | Baseline | Calibrated | Target |
|---|---|---|---|
| Peak bag pressure (kPa) | — | — | reference |
| Pressure RMS error (%) | — | ≤ 5 | 0 |
| Peak head acceleration (g) | baseline value | compare | — |
| Time of head peak (ms) | baseline value | compare | — |
Fill the numeric cells from your own run. The important judgment is directional: if the calibrated curve matches pressure but raises peak head acceleration beyond the baseline, the earlier or steeper pressure rise is stiffening the bag at head contact. In that situation, prefer a slightly later t_rise or a gentler early slope while keeping the peak pressure matched, and re-check both metrics.
m_total outside the inflator's rated output, the root cause is elsewhere in the airbag definition. Fix the geometry or vent first, then return to the inflator curve.Verification Checklist
- The generated
*DEFINE_CURVEintegrates to a total mass consistent with the inflator rating. - The simulated pressure history tracks the target within the stated RMS tolerance over the full inflation window.
- Peak head acceleration and its timing are reported alongside the pressure error, not in isolation.
- The final parameter set (
t_rise,mdot_peak,t_decay,m_total) is recorded so the run is reproducible. - Any residual mismatch is attributed to a specific cause (vent, volume, or curve shape) rather than left unexplained.
With the mass flow curve calibrated and both pressure and head acceleration documented, the model is ready for the downstream restraint tuning that follows.