.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "api/gallery/mechanical_engineering/machine_elements/plot_04_lundberg_palmgren_l10.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code or to run this example in your browser via JupyterLite. .. rst-class:: sphx-glr-example-title .. _sphx_glr_api_gallery_mechanical_engineering_machine_elements_plot_04_lundberg_palmgren_l10.py: Lundberg and Palmgren's rolling-bearing life (1947) =================================================== Identical ball bearings run under identical loads fail at very different times, because fatigue cracks start at randomly placed weak points below the raceway. Gustaf Lundberg and Arvid Palmgren (1947) of SKF treated the lives as Weibull-distributed, with a slope of about 10/9 for ball bearings. They defined the rating life :math:`L_{10}`, which 90% of bearings reach, and showed that it varies as :math:`(C/P)^p` with the basic load rating :math:`C` and the applied load :math:`P`. The exponent is :math:`p = 3` for balls and :math:`10/3` for rollers (:func:`~engineeringkit.mechanical_engineering.bearing_l10_life`). The example draws a simulated batch of bearings and checks both statements. .. GENERATED FROM PYTHON SOURCE LINES 18-23 .. code-block:: Python import matplotlib.pyplot as plt import numpy as np from engineeringkit.mechanical_engineering import bearing_l10_life .. GENERATED FROM PYTHON SOURCE LINES 24-30 A batch of bearings ------------------- A Weibull life of slope :math:`e` survives with probability :math:`R = 0.9^{(L/L_{10})^e}`. Draw 20 000 lives and count how many pass the rated life. .. GENERATED FROM PYTHON SOURCE LINES 30-41 .. code-block:: Python rng = np.random.default_rng(1947) C, P, slope = 30e3, 5e3, 10 / 9 L10 = bearing_l10_life(C, P) lives = L10 * (np.log(1 / rng.random(20_000)) / np.log(1 / 0.9)) ** (1 / slope) survived = np.mean(lives >= L10) median = np.median(lives) print(f"L10 = {L10:.3e} rev; fraction surviving L10 = {survived:.4f}") print(f"median life {median:.3e} rev = {median / L10:.2f} x L10 (Weibull: {(np.log(2) / np.log(1 / 0.9)) ** (1 / slope):.2f})") assert abs(survived - 0.9) < 0.01 .. rst-class:: sphx-glr-script-out .. code-block:: none L10 = 2.160e+08 rev; fraction surviving L10 = 0.8982 median life 1.192e+09 rev = 5.52 x L10 (Weibull: 5.45) .. GENERATED FROM PYTHON SOURCE LINES 42-47 The cube law ------------ Doubling the load of a ball bearing cuts its life eightfold; a roller bearing loses a factor of :math:`2^{10/3} \approx 10`. .. GENERATED FROM PYTHON SOURCE LINES 47-68 .. code-block:: Python loads = np.geomspace(1e3, 30e3, 50) ball, roller = bearing_l10_life(C, loads), bearing_l10_life(C, loads, p=10 / 3) print(f"ball: L10(2P)/L10(P) = {bearing_l10_life(C, 2 * P) / L10:.4f}") assert np.isclose(bearing_l10_life(C, 2 * P) / L10, 1 / 8) assert np.allclose(np.diff(np.log(ball)) / np.diff(np.log(loads)), -3) fig, axes = plt.subplots(1, 2, figsize=(10, 3.8)) ordered = np.sort(lives) axes[0].semilogx(ordered, 1 - np.arange(1, ordered.size + 1) / ordered.size, label="simulated batch") axes[0].axvline(L10, color="k", ls=":", label="L10") axes[0].axhline(0.9, color="0.6", ls="--") axes[0].set(xlabel="revolutions", ylabel="fraction surviving", title="Scatter of fatigue lives") axes[0].legend() axes[1].loglog(loads / 1e3, ball, label="ball, p = 3") axes[1].loglog(loads / 1e3, roller, label="roller, p = 10/3") axes[1].set(xlabel="equivalent load P [kN]", ylabel="L10 [revolutions]", title=f"C = {C / 1e3:.0f} kN") axes[1].legend() fig.tight_layout() plt.show() .. image-sg:: /api/gallery/mechanical_engineering/machine_elements/images/sphx_glr_plot_04_lundberg_palmgren_l10_001.png :alt: Scatter of fatigue lives, C = 30 kN :srcset: /api/gallery/mechanical_engineering/machine_elements/images/sphx_glr_plot_04_lundberg_palmgren_l10_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none ball: L10(2P)/L10(P) = 0.1250 .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.115 seconds) .. _sphx_glr_download_api_gallery_mechanical_engineering_machine_elements_plot_04_lundberg_palmgren_l10.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: lite-badge .. image:: images/jupyterlite_badge_logo.svg :target: ../../../../lite/lab/index.html?path=api/gallery/mechanical_engineering/machine_elements/plot_04_lundberg_palmgren_l10.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_04_lundberg_palmgren_l10.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_04_lundberg_palmgren_l10.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_04_lundberg_palmgren_l10.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_