The miner module

Implementation of the miner rule for fatigue analysis

Currently, the following implementations are part of this module:

  • Miner-elementar
  • Miner-haibach

The source will be given in the function/class

References

M. Wächter, C. Müller and A. Esderts, “Angewandter Festigkeitsnachweis nach {FKM}-Richtlinie” Springer Fachmedien Wiesbaden 2017, https://doi.org/10.1007/978-3-658-17459-0

  1. Haibach, “Betriebsfestigkeit”, Springer-Verlag 2006, https://doi.org/10.1007/3-540-29364-7
class pylife.strength.miner.MinerBase(ND_50, k_1, SD_50)[source]

Basic functions related to miner-rule (original)

Definitions will be based on the given references. Therefore, the original names are used so that they can be looked up easily.

Parameters:
  • ND_50 (float) – number of cycles of the fatigue strength of the S/N curve [number of cycles]
  • k_1 (float) – slope of the S/N curve [unitless]
  • SD_50 (float) – fatigue strength of the S/N curve [MPa]
N_predict(load_level, A=None)[source]

The predicted lifetime according to damage sum of the collective

Parameters:
  • load_level (float) – the maximum (stress) amplitude of the collective
  • A (float) – the lifetime multiple A BEWARE: this relation is only valid in a specific representation of the predicted (Miner) lifetime where the sn-curve is expressed via the point of the maximum amplitude of the collective: N_predicted = N(S = S_max) * A
calc_A(collective)[source]

Compute multiple of the lifetime

calc_zeitfestigkeitsfaktor(N, total_lifetime=True)[source]

Calculate “Zeitfestigkeitsfaktor” according to Waechter2017 (p. 96)

collective = None
effective_damage_sum(A)[source]

Compute ‘effective damage sum’ D_m

Refers to the formula given in Waechter2017, p. 99

Parameters:A (float or np.ndarray (with 1 element)) – the multiple of the lifetime
setup(collective)[source]

Calculations independent from the instantation

Use the setup for functions that might require information that was not yet available at runtime during instantation.

Parameters:collective (np.ndarray) – numpy array of shape (:, 2) where “:” depends on the number of classes defined for the rainflow counting * column: class values in ascending order * column: accumulated number of cycles first entry is the total number of cycles then in a descending manner till the number of cycles of the highest stress class
class pylife.strength.miner.MinerElementar(ND_50, k_1, SD_50)[source]

Implementation of Miner-elementar according to Waechter2017

V_FKM = None
V_haibach = None
calc_A(collective=None)[source]

Compute the lifetime multiple according to miner-elementar

Described in Waechter2017 as “Lebensdauervielfaches, A_ele”.

Parameters:collective (np.ndarray) – numpy array of shape (:, 2) where “:” depends on the number of classes defined for the rainflow counting * column: class values in ascending order * column: accumulated number of cycles first entry is the total number of cycles then in a descending manner till the number of cycles of the highest stress class
setup(collective)[source]

Calculations independent from the instantation

Use the setup for functions that might require information that was not yet available at runtime during instantation.

Parameters:collective (np.ndarray) – numpy array of shape (:, 2) where “:” depends on the number of classes defined for the rainflow counting * column: class values in ascending order * column: accumulated number of cycles first entry is the total number of cycles then in a descending manner till the number of cycles of the highest stress class
class pylife.strength.miner.MinerHaibach(ND_50, k_1, SD_50)[source]

Miner-modified according to Haibach (2006)

WARNING: Contrary to Miner-elementar, the lifetime multiple A
is not constant but dependent on the evaluated load level!
Parameters:MinerBase (see) –
A

the multiple of the life time initiated as dict Since A is different for each load level, the load level is taken as dict key (values are rounded to 0 decimals)

Type:dict
N_predict(load_level, A=None, ignore_inf_rule=False)[source]

The predicted lifetime according to damage sum of the collective

Parameters:
  • load_level (float) – the maximum (stress) amplitude of the collective
  • A (float) – the lifetime multiple A BEWARE: this relation is only valid in a specific representation of the predicted (Miner) lifetime where the sn-curve is expressed via the point of the maximum amplitude of the collective: N_predicted = N(S = S_max) * A
calc_A(load_level, collective=None, ignore_inf_rule=False)[source]

Compute the lifetime multiple for Miner-modified according to Haibach

Refer to Haibach (2006), p. 291 (3.21-61). The lifetime multiple can be expressed in respect to the maximum amplitude so that N_lifetime = N_Smax * A

Parameters:
  • load_level (float > 0) – load level in [MPa]
  • collective (np.ndarray (optional)) – the collective can optionally be input to this function if it is not specified, then the attribute is used. If no collective exists as attribute (is set during setup) then an error is thrown
  • ignore_inf_rule (boolean) – By default, the lifetime is returned as inf when the given load level is smaller than the lifetime (see Haibach eq. 3.2-62). This rule can be ignored if an estimate for the lifetime in the region below the fatigue strength is required for investigation.
Returns:

A – lifetime multiple return value is ‘inf’ if load_level < SD_50

Return type:

float > 0

evaluated_load_levels = None
setup(collective)[source]

Calculations independent from the instantation

Use the setup for functions that might require information that was not yet available at runtime during instantation.

Parameters:collective (np.ndarray) – numpy array of shape (:, 2) where “:” depends on the number of classes defined for the rainflow counting * column: class values in ascending order * column: accumulated number of cycles first entry is the total number of cycles then in a descending manner till the number of cycles of the highest stress class
pylife.strength.miner.get_accumulated_from_relative_collective(collective)[source]

Get collective with accumulated frequencies

This function can be used to transform a collective with relative frequencies.

Parameters:collective (np.ndarray) – numpy array of shape (:, 2) where “:” depends on the number of classes defined for the rainflow counting * column: class values in ascending order * column: relative number of cycles for each load class