2. Data acquisition from crash simulation runs
An AI diagnostic system is only as good as the data it consumes. Before any model can classify a numerical failure — negative volume, mass scaling runaway, energy imbalance, or contact instability — the raw evidence must be extracted from the solver in a form that is machine-readable, time-aligned, and physically interpretable. This section covers the practical mechanics of harvesting four categories of data from LS-DYNA, Radioss, and Abaqus/Explicit: solver logs, time-step histories, energy summaries, and element quality metrics.
2.1 What Each Solver Emits and Where
All three explicit codes produce a human-readable log stream and a set of binary or ASCII result databases. The log is the first place a numerical failure announces itself, but it is unstructured and solver-specific. The databases are structured but require a reader library. A robust acquisition pipeline handles both.
| Data category | LS-DYNA | Radioss | Abaqus/Explicit |
|---|---|---|---|
| Solver log | d3hsp, messag |
*.out, *.sta |
*.log, *.sta, *.msg |
| Time-step history | d3hsp time-step block, glstat |
*.sta (TH / DT columns) |
*.sta (stable time increment) |
| Energy summary | glstat, matsum |
*.out energy block, T01 file |
*.sta energy columns, ENERGY output |
| Element quality | d3hsp negative-volume messages, matsum |
*.out element failure listing |
*.msg element distortion warnings |
The key insight is that the same physical event — say, a shell element collapsing to zero thickness — appears in different files with different wording across the three codes. The acquisition layer must normalize these into a common schema before the diagnostic model sees them.
2.2 Extracting the Solver Log
The solver log is a chronological record of warnings, errors, and termination messages. For LS-DYNA, the d3hsp file contains the initialization summary, mass scaling report, and any negative-volume or negative-Jacobian messages. For Radioss, the *.out file carries the error and warning stream. For Abaqus/Explicit, the *.msg file holds element-level diagnostics while *.sta holds the per-increment summary.
A practical extraction step is to scan the log for known failure signatures and record the simulation time at which each first appears. The following Python snippet reads an LS-DYNA d3hsp file and captures negative-volume events with their timestamps:
import re
def parse_d3hsp(path):
events = []
ts_pattern = re.compile(r"time=\s*([0-9.E+-]+)")
nv_pattern = re.compile(r"negative volume.*element\s+(\d+)", re.I)
current_time = None
with open(path, errors="ignore") as f:
for line in f:
m = ts_pattern.search(line)
if m:
current_time = float(m.group(1))
nv = nv_pattern.search(line)
if nv:
events.append({
"type": "negative_volume",
"element_id": int(nv.group(1)),
"time": current_time
})
return events
For Radioss, the equivalent pattern targets lines containing NEGATIVE VOLUME or ELEMENT FAILURE in the *.out file. For Abaqus, the *.msg file uses phrases such as element distortion or excessive distortion. The acquisition layer should map all of these to a unified event type.
2.3 Time-Step History
The time-step history is the single most diagnostic signal for explicit crash simulations. A healthy run maintains a stable critical time step determined by the smallest element and the material wave speed. A sudden drop in the time step — often by orders of magnitude — signals element distortion, contact penetration, or mass-scaling collapse.
In LS-DYNA, the glstat file reports the current time step at each output interval. In Radioss, the *.sta file lists DT per cycle. In Abaqus/Explicit, the *.sta file reports the stable time increment. The acquisition pipeline should extract a time series of (simulation_time, dt) pairs and compute the ratio dt / dt_initial. A ratio below 0.01 is a strong indicator of impending numerical failure.
# Example glstat time-step extraction (LS-DYNA)
# Columns: time, dt, ...
def parse_glstat(path):
series = []
with open(path) as f:
for line in f:
parts = line.split()
if len(parts) >= 2:
try:
t = float(parts[0])
dt = float(parts[1])
series.append((t, dt))
except ValueError:
continue
return series
2.4 Energy Summaries
Energy balance is the most reliable global health check. For an explicit simulation, the total energy should be approximately conserved, with kinetic energy, internal energy, and contact energy exchanging in a physically plausible way. A growing hourglass energy or a negative internal energy indicates a numerical problem.
The acquisition layer should extract, at each output step: kinetic energy, internal energy, hourglass energy, sliding interface energy, and total energy. The diagnostic model then computes the hourglass-to-internal energy ratio and the energy balance error. In LS-DYNA, these appear in glstat; in Radioss, in the T01 file; in Abaqus, in the ENERGY output or the *.sta energy columns.
2.5 Element Quality Metrics
Element quality metrics — Jacobian ratio, aspect ratio, warpage, and minimum time step per element — are the local counterpart to the global energy check. They tell you where the failure is happening, not just that it is happening. LS-DYNA reports negative Jacobian and negative volume per element in d3hsp; Radioss reports element failure in *.out; Abaqus reports distortion in *.msg.
The acquisition pipeline should produce a per-element record with: element ID, part ID, minimum Jacobian, minimum time step, and the simulation time of first failure. This is the feature set that allows the AI model to localize the failure to a specific region of the vehicle model.
2.6 Unified Data Flow
The figure below shows how the four data streams from three solvers converge into a single normalized event store that feeds the diagnostic model.
2.7 Practical Acquisition Checklist
When building the acquisition pipeline for a new solver or a new project, verify the following before trusting the data:
- Output frequency: Ensure
glstat/*.staoutput is written at least every 0.1 ms of simulation time. Coarse output can miss the onset of a time-step collapse. - Unit consistency: LS-DYNA and Radioss use user-defined unit systems. Record the unit system in the metadata; a length in mm and a time in ms produce a wave speed in mm/ms, not m/s.
- Time alignment: All four data streams must share the same simulation-time origin. If the solver restarts, the restart time must be added to the log timestamps.
- Element ID stability: Confirm that element IDs in the log match those in the input deck. Some preprocessors renumber elements during export.
- Termination reason: Capture the final termination message verbatim. It is the single most informative label for supervised training.
With these four data streams normalized and time-aligned, the diagnostic model has the raw material it needs. The next section covers how to turn this event store into features that distinguish a benign warning from a true numerical failure.