4. Optimize Seatbelt Webbing Stiffness for Chest Compression
Why Webbing Stiffness Is a Tuning Lever, Not a Constant
In an LS-DYNA frontal occupant model, the seatbelt webbing is usually represented with a discrete element or shell-based belt material whose uniaxial force–strain response is defined by a load curve (for example *MAT_ELASTIC with *DEFINE_CURVE, or a seatbelt-specific material such as *MAT_SEATBELT). That curve is not a single number: it encodes the initial slack take-up, the elastic elongation region, and the stiffening near the webbing's rated strength. Chest compression (deflection) is driven by how much force the belt transfers into the ribcage for a given occupant forward motion. A softer webbing stretches more, so the occupant travels further forward before the belt "catches," which generally lowers peak chest force but increases forward excursion. A stiffer webbing catches earlier and harder, reducing excursion but raising chest loading. The tuning task is therefore a two-objective trade-off, and the correct engineering approach is a small design-of-experiments (DOE) sweep over the webbing stiffness scale factor, followed by selection of the curve that satisfies both a chest-compression limit and an excursion limit.
Defining the Webbing Force–Strain Curve
Start from a baseline webbing curve. A representative polyester webbing load curve (illustrative teaching values, not measured data) can be defined as force versus engineering strain:
*DEFINE_CURVE
$# lcid sidr sfa sfo offa offo
101 0 1 1 0 0
$# abscissa (strain) ordinate (force, N)
0.000 0.0
0.010 800.0
0.020 2200.0
0.040 4800.0
0.060 7200.0
0.080 9200.0
0.100 10500.0
To sweep stiffness without rewriting the whole curve, scale the ordinate with the curve scale factor sfo (or apply a stiffness multiplier in the belt material). A scale of 1.0 is baseline; 0.8 is softer; 1.2 is stiffer. This keeps the curve shape (slack take-up and stiffening) consistent while changing effective stiffness, which is exactly the parameter a DOE should vary.
Setting Up the DOE
A practical, low-cost DOE for a single factor is a one-factor, multi-level sweep. Five levels of the stiffness scale factor are sufficient to reveal the trend and locate the feasible window:
| Run | Stiffness scale (sfo) | Intent |
|---|---|---|
| D1 | 0.80 | Soft — expect low chest compression, high excursion |
| D2 | 0.90 | Moderately soft |
| D3 | 1.00 | Baseline |
| D4 | 1.10 | Moderately stiff |
| D5 | 1.20 | Stiff — expect low excursion, high chest compression |
Hold all other restraint parameters constant across runs: airbag vent area, inflator mass flow, pretensioner profile, load limiter level, friction coefficients, and the impact velocity (for example a 50 km/h full-frontal pulse). If any of these change between runs, the DOE no longer isolates webbing stiffness.
Running the Sweep and Extracting Responses
For each run, submit the deck and extract two occupant responses from the dummy output: peak chest compression (deflection in mm, from the chest deflection channel) and peak forward excursion (for example head or chest forward displacement in mm, from the nodal or rigid-body displacement history). A minimal extraction workflow using LS-DYNA's binary databases and lsda/lsprepost scripting or a Python reader is:
import subprocess, re
runs = {"D1": 0.80, "D2": 0.90, "D3": 1.00, "D4": 1.10, "D5": 1.20}
results = {}
for name, sfo in runs.items():
# patch the curve scale factor in the keyword deck
with open("belt_base.k", "r") as f:
deck = f.read()
deck = re.sub(r"(\*DEFINE_CURVE\s*\n\s*101\s+0\s+1\s+)1",
r"\g<1>" + str(sfo), deck, count=1)
with open(f"belt_{name}.k", "w") as f:
f.write(deck)
subprocess.run(["lsdyna", "i=belt_%s.k" % name, "memory=200m"], check=True)
# placeholder: read peak chest compression and excursion from d3plot
# (use lsprepost -nographics or a python d3plot reader)
results[name] = {"sfo": sfo, "chest_mm": None, "excursion_mm": None}
for name, r in results.items():
print(name, r["sfo"], r["chest_mm"], r["excursion_mm"])
The chest_mm and excursion_mm fields are populated from the d3plot history; the script structure above is the reproducible harness, and the response values come from the actual run, not from assumption. Do not report numbers you have not extracted.
Reading the Trade-off
Plot chest compression against excursion for the five runs. The expected shape is a monotonic trade-off: as stiffness rises, excursion falls and chest compression rises. The feasible design is the run whose chest compression is below the injury-criterion limit (for example a chest deflection limit derived from your project's criterion) while excursion remains within the packaging/contact limit. If no single run satisfies both, the webbing alone cannot meet the targets and you must combine it with the load limiter or pretensioner — but that is a separate study.
Selecting and Verifying the Final Curve
From the sweep, pick the run that sits inside the feasible window with the largest margin on the tighter of the two constraints. Then re-run that single configuration with a refined time-step output and confirm the peak values are stable (no single-sample spikes from contact chatter). Verify by checking that the belt force–time history is smooth and that the chest deflection peak occurs at a physically sensible time relative to the impact pulse. If the chosen run sits exactly on a limit, add one intermediate level (for example 0.95 or 1.05) to confirm the boundary rather than accepting a knife-edge design.
Deliverable: DOE Summary Table
Record the study in a form that can be reviewed and reused. Fill the response columns from the actual runs:
| Run | sfo | Peak chest compression (mm) | Peak forward excursion (mm) | Within chest limit? | Within excursion limit? |
|---|---|---|---|---|---|
| D1 | 0.80 | — | — | — | — |
| D2 | 0.90 | — | — | — | — |
| D3 | 1.00 | — | — | — | — |
| D4 | 1.10 | — | — | — | — |
| D5 | 1.20 | — | — | — | — |
The selected curve is the one whose row shows both "Yes" entries with the largest combined margin; document its sfo value and the corresponding *DEFINE_CURVE ordinate scaling in the model's tuning log so the configuration is reproducible.