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,
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