Skip to content

Validation

David Fieser edited this page Aug 23, 2026 · 1 revision

Validation

What the toolkit is validated against, with the honest results. Every claim here can be reproduced from the repository. Where a prediction runs non-conservative, this page says so.

Strain-life fitting, SAE 1137

The golden-value case used across the test suite, the tutorial, and the docs: six published strain-controlled SAE 1137 tests, re-tabulated from their cited source in the seed collection. The fitted constants are locked in the tests: about sigma_f' = 1073 MPa, b = -0.084, eps_f' = 1.11, c = -0.62, and a transition life near 22,000 reversals. The independently fitted Ramberg-Osgood constants carry r squared = 0.986 on this data, and the fit reports the Masing departure, n' = 0.175 against b/c = 0.135, instead of hiding it.

Rainflow counting, ASTM E1049

The counting engine reproduces the worked example from ASTM E1049, the standard's own history with its expected cycle table. This is a golden-value test in the suite.

Variable amplitude, smooth specimens, Conle SAE histories

examples/validate_sae_conle.py reproduces the Conle SAE smooth-specimen variable-amplitude tests. It downloads the three SAE Fatigue Design and Evaluation committee histories from fde.uwaterloo.ca and runs the Masing memory engine with Conle's own published SAE10B20 constants. It then compares blocks to failure against the experimental values from his 1974 thesis.

Result as of 2026-07-11: the transmission and bracket histories predict within a factor of two of the experimental geometric mean. The suspension history is about three times non-conservative, and all three lean non-conservative. That is consistent with the documented scatter of linear-damage local-strain predictions on this program, and it is stated here rather than smoothed over.

python examples/validate_sae_conle.py

Variable amplitude, notched member, SAE keyhole benchmark

examples/validate_sae_keyhole.py reproduces two fully documented cases from the SAE keyhole program, documented in SAE AE-6 and preserved on the Internet Archive from the eFatigue benchmark page. Load-input Neuber with Kt = 3. Output from a run on 2026-08-21:

  • CR1, RQC-100, constant amplitude. Our SWT prediction is 203,696 cycles against the benchmark's own strain-life calculation of 211,000, within 4 percent. The experimental life to a 2.5 mm crack is 605,000 cycles. Initiation methods run conservative against a crack-length-based life, and the benchmark's did too.
  • SM2, Man-Ten, suspension history. Our SWT prediction is 3,233 blocks and our Morrow prediction is 1,504 blocks. The benchmark's own calculation is 2,892, and the experimental geometric mean is 1,768 blocks from tests of 1750, 2240, and 1410. The two mean-stress models bracket the experiment at 1.83 and 0.85 times the geometric mean.
python examples/validate_sae_keyhole.py

Formats and drift guards

The interchange formats are frozen as JSON Schema artifacts under docs/schemas/, and a drift-guard test fails if the pydantic models and the published schemas ever disagree. The seed collection validates against those schemas in the suite.

What is not externally validated

Honesty requires the other direction too. Methods without a golden-value comparison against a published experiment are verified by unit tests against their defining equations and cited sources, not against independent lab data. That currently includes, among others, the elevated-temperature creep-fatigue models, the multiaxial critical-plane search, and the censored maximum-likelihood statistics layer. The statistics layer is checked against its mathematical properties and published formulations. Results from these paths carry the same citations as everything else, and contributions of published comparison cases are welcome.

Run the whole suite

python -m pytest

The suite includes the golden-value tests above. CI runs it on every push.

Clone this wiki locally