-
Notifications
You must be signed in to change notification settings - Fork 0
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.
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.
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.
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.pyexamples/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.pyThe 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.
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.
python -m pytestThe suite includes the golden-value tests above. CI runs it on every push.
lcf-strain-life, by David Fieser and Hugh Shortt, both authors contributed equally. MIT license. Cite via CITATION.cff or DOI 10.5281/zenodo.21222820.
Getting started
Reference
Help
Elsewhere