1. Classify LS-DYNA Termination Messages by Root Cause
Why Termination Messages Are Evidence, Not Verdicts
LS-DYNA rarely prints a single sentence that names the true root cause. What it prints is the last thing it was doing when it stopped: a negative volume in a solid element, a mass-scaling warning that escalated, a license checkout failure, or a memory allocation that returned null. The same message text can appear under different root causes, and different messages can share one root cause. Classification therefore has to combine the literal message string with the surrounding context — the phase of the run, the last successful cycle, the model size, the machine state, and the messages immediately preceding the fatal one.
This case builds a repeatable triage procedure: capture the message set, normalize it, map it to a root-cause category, and record the evidence that justifies the mapping. The output is a classification table you can reuse on any failed run.
The Five Root-Cause Categories
For explicit and implicit LS-DYNA runs, most terminations fall into five practical buckets. The boundaries matter because the recovery action differs sharply between them.
| Category | Typical message signatures | Context that confirms it | First recovery action |
|---|---|---|---|
| Input / model error | *** Error reading input, negative volume in solid element #, node # used in element # is not defined, duplicate node id, invalid *MAT card | Fails within the first few cycles, or during initialization before cycle 0; element/node IDs point to a specific region | Fix the deck: mesh quality, connectivity, material card fields |
| Numerical instability | negative volume after many cycles, element failed cascade, out-of-range velocity, NaN in results, time step has become too small | Runs for hundreds or thousands of cycles, then diverges; energy grows without bound; one element distorts first | Hourglass control, mesh refinement, contact/penalty tuning, time-step control |
| Resource exhaustion | memory allocation failed, out of memory, cannot allocate, OS-level Killed, disk quota exceeded | Fails at a predictable model size or after a restart; d3hsp shows memory request near machine limit | Increase memory (memory=), reduce model, enable MPP decomposition |
| License issue | license checkout failed, no license available, LS-DYNA license server not responding | Fails immediately at startup, before any cycle; other jobs on the same host succeed | Check license server, release stale tokens, verify LSTC_FILE/server env |
| Environment / infrastructure | wall-clock kill, node failure in MPP, filesystem error, segmentation fault | Fails at arbitrary cycle counts; correlates with cluster events, not model content | Re-run on healthy node, check scheduler logs, verify scratch space |
Reading the Message Set in Order
The fatal line is the last line, but the diagnosis usually lives in the lines above it. A practical reading order:
- Locate the fatal line. Search the
messag/d3hsp/ stdout for*** Error,termination, or the last timestamped line. - Find the last successful cycle and time. In
d3hsp, the cycle/time table shows where the run stopped. A stop at cycle 0–5 points to input; a stop at cycle 50,000 points to instability or resources. - Scan the preceding 20–50 lines. Warnings about negative volume, small time step, or mass scaling that appear just before the fatal line are the real signal.
- Cross-check the model size against the machine. If the model is large and the message is allocation-related, resource exhaustion is the leading hypothesis.
- Check whether the run ever started. No cycle output at all plus a license message means license; no cycle output plus an input error means deck.
Worked Classification Example
Consider a run whose messag file ends with the following excerpt (illustrative, reconstructed from a typical solid-compression model):
cycle time dt
48210 3.2140E-03 1.02E-09
*** Warning 40123: negative volume in solid element # 88214
*** Warning 40123: negative volume in solid element # 88215
*** Error 40123: negative volume in solid element # 88214
termination
Applying the decision path: cycle output exists (48,210 cycles), so it is not a license or startup failure. No allocation message appears, so resource exhaustion is not the leading hypothesis. The fatal line is a negative volume, and it is preceded by warnings on the same element IDs. The run survived 48,210 cycles before failing, which rules out a pure deck error (those fail at cycle 0–5). The classification is numerical instability, with the evidence being the late-cycle timing, the repeated element IDs, and the absence of allocation or license text. The recovery direction is mesh quality and hourglass control in the region of elements 88214–88215, not a deck syntax fix.
Now contrast a second excerpt:
LS-DYNA terminated
*** Error: memory allocation failed for 2147483648 bytes
requested by: solid element storage
No cycle table is present, the message names an allocation size, and the requested block is large. Classification: resource exhaustion. The recovery action is to raise the memory= value or reduce the model, not to touch the mesh.
Classification Record Template
Keep one row per failed run so the evidence is auditable and comparable across a batch of failures.
| Field | What to record | Example |
|---|---|---|
| Run ID | Job name / scheduler ID | crash_v3_mp4 |
| Fatal line | Exact text of the terminating message | *** Error 40123: negative volume in solid element # 88214 |
| Last cycle / time | From d3hsp cycle table | 48210 / 3.214E-03 |
| Preceding warnings | Up to 5 lines before fatal | negative volume #88214, #88215 |
| Category | One of the five buckets | Numerical instability |
| Justification | Which context signals drove the choice | Late cycle, repeated element IDs, no allocation text |
| Next action | Targeted recovery step | Refine mesh near elements 88214–88215; enable hourglass control |
memory= value settles a resource-vs-instability ambiguity in minutes; a full remesh does not.negative volume text appears in both input-error and instability cases; only the cycle count and the preceding warnings separate them. Recording the last successful cycle is the single most useful discriminator.Verification of the Classification
A classification is only useful if it predicts the outcome of the recovery action. After applying the targeted fix, re-run and check: if the run now passes the previous failure cycle and the fatal message no longer appears, the classification was consistent with the cause. If the same message returns at a similar cycle, the category was likely wrong — for example, a resource problem misread as instability will reappear once memory pressure returns. Treat the classification table as a hypothesis log, not a final verdict, and update the category when the re-run contradicts it.