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.

Keep the abscissa (strain) fixed and vary only the force scale. Changing strain sampling points as well confounds the study: you would no longer know whether a response change came from stiffness or from curve shape.

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:

RunStiffness scale (sfo)Intent
D10.80Soft — expect low chest compression, high excursion
D20.90Moderately soft
D31.00Baseline
D41.10Moderately stiff
D51.20Stiff — 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.

Webbing Stiffness DOE: Chest Compression vs. Forward Excursion Forward excursion (mm) → Chest compression (mm) → Feasible window (chest & excursion within limits) chest limit excursion limit D1 0.80 D2 0.90 D3 1.00 D4 1.10 D5 1.20 stiffer webbing → less excursion, more chest load

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.

A common failure symptom is that chest compression barely changes across the sweep. That usually means the load limiter is saturating the belt force before webbing stretch matters, so the webbing stiffness is not the controlling compliance. Check the belt force–time history: if it plateaus at the limiter level for most of the event, the DOE is measuring the limiter, not the webbing.

Deliverable: DOE Summary Table

Record the study in a form that can be reviewed and reused. Fill the response columns from the actual runs:

RunsfoPeak chest compression (mm)Peak forward excursion (mm)Within chest limit?Within excursion limit?
D10.80————
D20.90————
D31.00————
D41.10————
D51.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.