Palmgren-miner damage model

Palmgren-miner damage model also known as the linear damage model is one of the famous damage models used in the engineering field. Based on the Palmgren-miner’s model, the cumulative damage can be expressed by the following equation,

\[D = \sum \frac{C_i}{F_i}\]

where \(C_i\) and \(F_i\) are the counting cycles and the failure cycles at a specific load level.

In essence, the Palmgren-miner damage model treats the fatigue damage on different load levels separately. Therefore, the total damage can be calculated by adding the damage from each load level. Although a discrepancy can be found between the experimental results and the Palmgren-miner damage model, it is still widely used due to its simplicity.

Reference:

  • Palmgren, A.G., 1924. Die Lebensdaur von Kugellagern [Life Length of Roller Bearings]. Zeitschrift des Vereines Deutscher Ingenieure (VDI Zeitschrift), 68(14), pp.339-341.

  • Miner, M.A., 1945. Cumulative damage in fatigue. Journal of Applied Mechanics 12(3): A159–A164.

Naive Palmgren-miner damage model

Function minerDamageModelNaive implements the native Palmgren-miner damage model.

The naive Palmgren-miner damage model refers to the damage calculation directly based on the aforementioned equation. When we know the counting cycles and failure cycles at each level, then the total damage can be calculated by summing the damage from all load levels.

Function help

[1]:
from ffpack.fdm import minerDamageModelNaive
help( minerDamageModelNaive )
Help on function minerDamageModelNaive in module ffpack.fdm.minerModel:

minerDamageModelNaive(fatigueData)
    Naive Palmgren-miner damage model directly calcuates the damage results.

    Parameters
    ----------
    fatigueData: 2d array
        Paired counting and experimental data under each load condition,
        e.g., [ [ C1, F1 ], [ C2, F2 ], ..., [ Ci, Fi ] ]
        where Ci and Fi represent the counting cycles and failure cycles
        under the same load condition.

    Returns
    -------
    rst: scalar
        Fatigue damage calculated based on the Palmgren-miner model

    Raises
    ------
    ValueError
        If fatigueData length is less than 1.
        If counting cycles is less than 0.
        If number of failure cycles is less than or equal 0.
        If number of counting cycles is large than failure cycles.


    Examples
    --------
    >>> from ffpack.fdm import minerDamageModelNaive
    >>> fatigueData = [ [ 10, 100 ], [ 200, 2000 ] ]
    >>> rst = minerDamageModelNaive( fatigueData )

Example with default values

[2]:
nmdrFatigueData =  [ [ 10, 100 ], [ 200, 2000 ] ]

nmdrResults = minerDamageModelNaive( nmdrFatigueData )
[3]:
print( nmdrResults )
0.2

Classic Palmgren-miner damage model

Function minerDamageModelClassic implements the classic Palmgren-miner damage model.

The classic Palmgren-miner damage model can calculate the total damage based on the experimental SN curve. Since the load level for counting cycles might be unavailable for failure cycles, the experimental SN curve will be fitted first and determine the failure cycles at the same load level.

Notes

The load levels under or equal to the fatigueLimit will be ignored for fatigue damage calculation since these load levels do not contribute to the fatigue damage.

Function help

[4]:
from ffpack.fdm import minerDamageModelClassic
help( minerDamageModelClassic )
Help on function minerDamageModelClassic in module ffpack.fdm.minerModel:

minerDamageModelClassic(lccData, snData, fatigueLimit)
    Classical Palmgren-miner damage model calculates the damage results
    based on the SN curve.

    Parameters
    ----------
    lccData: 2d array
        Load cycle counting results in a 2D matrix,
        e.g., [ [ value, count ], ... ]

    snData: 2d array
        Experimental SN data in 2D matrix,
        e.g., [ [ N1, S1 ], [ N2, S2 ], ..., [ Ni, Si ] ]

    fatigueLimit: scalar
        Fatigue limit indicating the minimum S that can cause fatigue.

    Returns
    -------
    rst: scalar
        Fatigue damage calculated based on the Palmgren-miner model.

    Raises
    ------
    ValueError
        If the lccData dimension is not 2.
        If the lccData length is less than 1.

    Examples
    --------
    >>> from ffpack.fdr import minerDamageModelClassic
    >>> lccData = [ [ 1, 100 ], [ 2, 10 ] ]
    >>> snData = [ [ 10, 3 ], [ 1000, 1 ] ]
    >>> fatigueLimit = 0.5
    >>> rst = minerDamageModelClassic( lccData, snData, fatigueLimit )

Example with default values

[5]:
cmdrLccData = [ [ 1, 100 ], [ 2, 10 ] ]
cmdrSnData = [ [ 10, 3 ], [ 1000, 1 ] ]
cmdrFatigueLimit = 0.5

cmdrResults = minerDamageModelClassic( cmdrLccData, cmdrSnData, cmdrFatigueLimit )
[6]:
print( "{:.2f}".format(cmdrResults) )
0.20