The miner module#
Provide Miner damage accumulation rules for fatigue analysis.
The module implements helpers for choosing between Miner original, Miner
elementary, and Miner-Haibach assumptions. The variants differ in how they
extend the S-N curve below the endurance knee: horizontal for Miner original,
unchanged finite-life slope for Miner elementary, and the Haibach slope
2 * k_1 - 1 for Miner-Haibach. The terminology follows Wächter et al.
[Waechter-Miner] and Haibach [Haibach-Miner].
References
M. Wächter, C. Müller, and A. Esderts, “Angewandter Festigkeitsnachweis nach FKM-Richtlinie”, Springer Fachmedien Wiesbaden, 2017.
Haibach, “Betriebsfestigkeit”, Springer-Verlag, 2006.
- class pylife.strength.miner.MinerBase(pandas_obj)[source]#
Provide common operations for Gassner-Miner calculations.
MinerBaseextendspylife.materiallaws.WoehlerCurvewith operations that depend on a load collective shape, such as lifetime multiples and effective damage sums. Subclasses implement the selected Miner hypothesis.- Parameters:
pandas_obj (pandas.Series or pandas.DataFrame) – Pandas object containing Wöhler curve parameters.
See also
pylife.strength.miner.MinerElementaryUse the elementary Miner hypothesis.
pylife.strength.miner.MinerHaibachUse the Miner-Haibach hypothesis.
- effective_damage_sum(collective)[source]#
Calculate the effective damage sum for a load collective.
- Parameters:
collective (pylife.stress.collective.LoadCollective) – Load collective with stress amplitudes and cycle counts.
- Returns:
Effective damage sum, dimensionless. A value of
1.0means failure in the unmodified Miner convention.- Return type:
See also
pylife.strength.miner.effective_damage_sumCalculate the value from a lifetime multiple.
- finite_life_factor(N)[source]#
Calculate the finite-life factor for a collective cycle count.
- Parameters:
N (float or array_like) – Total number of cycles in the load collective.
- Returns:
Finite-life factor, dimensionless.
- Return type:
Notes
Following Wächter et al. [Waechter-MinerBase] the factor is
\[f_N = \left(\frac{N_D}{N}\right)^{1/k_1}.\]References
[Waechter-MinerBase]M. Wächter, C. Müller, and A. Esderts, “Angewandter Festigkeitsnachweis nach FKM-Richtlinie”, Springer Fachmedien Wiesbaden, 2017, p. 96.
- gassner_cycles(collective)[source]#
Calculate the Gassner cycle count for a load collective.
- Parameters:
collective (pylife.stress.collective.LoadCollective) – Load collective with stress amplitudes and cycle counts.
- Returns:
Number of cycles on the Gassner line for the given collective.
- Return type:
Notes
The absolute load level matters because the maximum collective amplitude is used as the reference point on the Wöhler curve.
- abstractmethod lifetime_multiple(collective)[source]#
Calculate the lifetime multiple for the selected Miner rule.
- Parameters:
collective (pylife.stress.collective.LoadCollective) – Load collective with stress amplitudes and cycle counts.
- Returns:
Lifetime multiple
A, dimensionless and greater than0.- Return type:
Notes
Subclasses implement the actual hypothesis. The value scales the life at the maximum collective amplitude to the life of the complete collective.
- class pylife.strength.miner.MinerElementary(pandas_obj)[source]#
Apply the Miner elementary damage accumulation hypothesis.
Miner elementary extends the S-N curve below the knee point with the same slope as the finite-life branch,
k_2 = k_1. The resulting collective shape factor is independent of the absolute load level, so a Gassner-shifted Wöhler curve can be constructed.- Parameters:
pandas_obj (pandas.Series or pandas.DataFrame) – Pandas object containing Wöhler curve parameters.
See also
pylife.materiallaws.WoehlerCurve.miner_elementarySelect
k_2 = k_1for direct damage calculation.pylife.strength.miner.MinerHaibachUse the Haibach slope below the knee.
- gassner(collective)[source]#
Calculate the Gassner-shifted Wöhler curve for Miner elementary.
- Parameters:
collective (pylife.stress.collective.LoadCollective) – Load collective with stress amplitudes and cycle counts.
- Returns:
Fatigue accessor of the Gassner-shifted Wöhler curve. The knee cycle count
NDis multiplied by the lifetime multiple ofcollective.- Return type:
- lifetime_multiple(collective)[source]#
Calculate the Miner-elementary lifetime multiple.
- Parameters:
collective (pylife.stress.collective.LoadCollective) – Load collective with stress amplitudes and cycle counts.
- Returns:
Lifetime multiple
A_ele, dimensionless and greater than0.- Return type:
Notes
Following Wächter et al. [Waechter-MinerElementary], the Miner-elementary lifetime multiple is the reciprocal of the Haibach solidity value
Vcomputed with slopek_1:\[A_{ele} = \frac{1}{V}.\]References
[Waechter-MinerElementary]M. Wächter, C. Müller, and A. Esderts, “Angewandter Festigkeitsnachweis nach FKM-Richtlinie”, Springer Fachmedien Wiesbaden, 2017.
- class pylife.strength.miner.MinerHaibach(pandas_obj)[source]#
Apply the Miner-Haibach damage accumulation hypothesis.
Miner-Haibach extends the S-N curve below the knee point with the slope
k_2 = 2 * k_1 - 1. Loads belowSDtherefore still contribute damage, but less strongly than loads above the knee.- Parameters:
pandas_obj (pandas.Series or pandas.DataFrame) – Pandas object containing Wöhler curve parameters.
Warning
Unlike Miner elementary, the lifetime multiple depends on the evaluated load level. Therefore this accessor does not provide a Gassner-shift method.
- lifetime_multiple(collective)[source]#
Calculate the Miner-Haibach lifetime multiple.
- Parameters:
collective (pylife.stress.collective.LoadCollective) – Load collective with stress amplitudes and cycle counts.
- Returns:
Lifetime multiple
A, dimensionless and greater than0. The return value isnumpy.infif the maximum collective amplitude is belowSD.- Return type:
Notes
With normalized amplitudes
x_i = S_{a,i} / S_{a,max}andx_D = SD / S_{a,max}, Haibach damage accumulation [Haibach-MinerHaibach] uses\[A = \frac{\sum_i n_i} {\sum_{x_i \ge x_D} n_i x_i^{k_1} + x_D^{1-k_1}\sum_{x_i < x_D} n_i x_i^{2k_1-1}}.\]References
[Haibach-MinerHaibach]E. Haibach, “Betriebsfestigkeit”, Springer-Verlag, 2006, p. 291.
- pylife.strength.miner.effective_damage_sum(lifetime_multiple)[source]#
Calculate the FKM effective damage sum from a lifetime multiple.
- Parameters:
lifetime_multiple (float) – Lifetime multiple
Aof a load collective, dimensionless.- Returns:
Effective damage sum, dimensionless. The value is limited to the interval
[0.3, 1.0].- Return type:
Notes
The FKM effective damage sum is calculated as
\[D_m = \min\left(1, \max\left(0.3, \frac{2}{A^{1/4}}\right)\right).\]A damage sum of
1.0means failure in the unmodified Miner convention.