The WoehlerCurve class

class pylife.materiallaws.WoehlerCurve(pandas_obj)[source]

A PylifeSignal accessor for Wöhler Curve data.

Wöhler Curve (aka SN-curve) determines after how many load cycles at a certain load amplitude the component is expected to fail.

The signal has the following mandatory keys:

  • k_1 : The slope of the Wöhler Curve

  • ND : The cycle number of the endurance limit

  • SD : The load level of the endurance limit

The _50 suffixes imply that the values are valid for a 50% probability of failure.

There are the following optional keys:

  • k_2The slope of the Wöhler Curve below the endurance limit

    If the key is missing it is assumed to be infinity, i.e. perfect endurance

  • TNThe scatter in cycle direction, (N_90/N_10)

    If the key is missing it is assumed to be 1.0 – i.e. no scatter – or calculated from TS if given.

  • TSThe scatter in load direction, (SD_90/SD_10)

    If the key is missing it is assumed to be 1.0 – i.e. no scatter – or calculated from TN if given.

property ND
property SD
property TN

The load direction scatter value TN.

property TS

The load direction scatter value TS.

basquin_cycles(load, failure_probability=None)[source]

Calculate the cycles numbers from loads according to the Basquin equation.

Parameters:
  • load (array_like) – The load levels for which the corresponding cycle numbers are to be calculated.

  • failure_probability (float, optional) – The failure probability with which the component should fail when charged with load for the calculated cycle numbers. If not given, the current failure_probablility attribute is used.

Returns:

cycles – The cycle numbers at which the component fails for the given load values

Return type:

numpy.ndarray

basquin_load(cycles, failure_probability=None)[source]

Calculate the load values from loads according to the Basquin equation.

Parameters:
  • cycles (array_like) – The cycle numbers for which the corresponding load levels are to be calculated.

  • failure_probability (float, optional) – The failure probability with which the component should fail when charged with load for the calculated cycle numbers. If not given, the current failure_probablility attribute is used.

Returns:

cycles – The cycle numbers at which the component fails for the given load values

Return type:

numpy.ndarray

broadcast(parameter, droplevel=None)

Broadcast the parameter to the object of self.

Parameters:

parameters (scalar, numpy array or pandas object) – The parameter to broadcast to

Returns:

parameter, object

Return type:

index aligned numerical objects

Examples

The behavior of the Broadcaster is best illustrated by examples:

  • Broadcasting pandas.Series to a scalar results in a scalar and a pandas.Series.

    obj = pd.Series([1.0, 2.0], index=pd.Index(['foo', 'bar'], name='idx'))
    obj
    
    idx
    foo    1.0
    bar    2.0
    dtype: float64
    
    parameter, obj = Broadcaster(obj).broadcast(5.0)
    
    parameter
    
    array(5.)
    
    obj
    
    idx
    foo    1.0
    bar    2.0
    dtype: float64
    
  • Broadcasting pandas.DataFrame to a scalar results in a pandas.DataFrame and a pandas.Series.

    obj = pd.DataFrame({
        'foo': [1.0, 2.0],
        'bar': [3.0, 4.0]
    }, index=pd.Index([1, 2], name='idx'))
    obj
    
    foo bar
    idx
    1 1.0 3.0
    2 2.0 4.0
    parameter, obj = Broadcaster(obj).broadcast(5.0)
    
    parameter
    
    idx
    1    5.0
    2    5.0
    dtype: float64
    
    obj
    
    foo bar
    idx
    1 1.0 3.0
    2 2.0 4.0
  • Broadcasting pandas.DataFrame to a a pandas.Series results in a pandas.DataFrame and a pandas.Series, if and only if the index name of the object is None.

    obj = pd.Series([1.0, 2.0], index=pd.Index(['tau', 'chi']))
    obj
    
    tau    1.0
    chi    2.0
    dtype: float64
    
    parameter = pd.Series([3.0, 4.0], index=pd.Index(['foo', 'bar'], name='idx'))
    parameter
    
    idx
    foo    3.0
    bar    4.0
    dtype: float64
    
    parameter, obj = Broadcaster(obj).broadcast(parameter)
    
    parameter
    
    idx
    foo    3.0
    bar    4.0
    dtype: float64
    
    obj
    
    tau chi
    idx
    foo 1.0 2.0
    bar 1.0 2.0
cycles(load, failure_probability=None)[source]

Calculate the cycles numbers from loads.

Parameters:
  • load (array_like) – The load levels for which the corresponding cycle numbers are to be calculated.

  • failure_probability (float, optional) – The failure probability with which the component should fail when charged with load for the calculated cycle numbers. If not given, the current failure_probablility attribute is used.

Returns:

cycles – The cycle numbers at which the component fails for the given load values

Return type:

numpy.ndarray

Notes

By default the calculation is performed according to the Basquin equation using basquin_cycles(). Derived classes can choose to override this in order to implement a different fatigue law.

fail_if_key_missing(keys_to_check, msg=None)

Raise an exception if any key is missing in a self._obj object.

Parameters:
Raises:
  • AttributeError – if self._obj is neither a pandas.DataFrame nor a pandas.Series

  • AttributeError – if any of the keys is not found in the self._obj’s keys.

Notes

If self._obj is a pandas.DataFrame, all keys of keys_to_check meed to be found in the self._obj.columns.

If self._obj is a pandas.Series, all keys of keys_to_check meed to be found in the self._obj.index.

See also

get_missing_keys(), stresssignal.StressTensorVoigt

property failure_probability
classmethod from_parameters(**kwargs)

Make a signal instance from a parameter set.

This is a convenience function to instantiate a signal from individual parameters rather than pandas objects.

A signal class like

@pd.api.extensions.register_dataframe_accessor('foo_signal')
class FooSignal(PylifeSignal):
    pass

The following two blocks are equivalent:

pd.Series({'foo': 1.0, 'bar': 2.0}).foo_signal
FooSignal.from_parameters(foo=1.0, bar=1.0)
get_missing_keys(keys_to_check)

Get a list of missing keys that are needed for a self._obj object.

Parameters:

keys_to_check (list) – A list of keys that need to be available in self._obj

Returns:

missing_keys – a list of missing keys

Return type:

list

Raises:

AttributeError – if self._obj is neither a pandas.DataFrame nor a pandas.Series

Notes

If self._obj is a pandas.DataFrame, all keys of keys_to_check not found in the self._obj.columns are returned.

If self._obj is a pandas.Series, all keys of keys_to_check not found in the self._obj.index are returned.

property k_1

The second Wöhler slope.

property k_2

The second Wöhler slope.

keys()

Get a list of missing keys that are needed for a signal object.

Returns:

keys – a pandas index of keys

Return type:

pd.Index

Raises:

AttributeError – if self._obj is neither a pandas.DataFrame nor a pandas.Series

Notes

If self._obj is a pandas.DataFrame, the self._obj.columns are returned.

If self._obj is a pandas.Series, the self._obj.index are returned.

load(cycles, failure_probability=None)[source]

Calculate the load values from loads.

Parameters:
  • cycles (array_like) – The cycle numbers for which the corresponding load levels are to be calculated.

  • failure_probability (float, optional) – The failure probability with which the component should fail when charged with load for the calculated cycle numbers. If not given, the current failure_probablility attribute is used.

Returns:

cycles – The cycle numbers at which the component fails for the given load values

Return type:

numpy.ndarray

Notes

By default the calculation is performed according to the Basquin equation using basquin_cycles(). Derived classes can choose to override this in order to implement a different fatigue law.

miner_elementary()[source]

Set k_2 to k_1 according Miner Elementary method (k_2 = k_1).

Return type:

modified copy of self

miner_haibach()[source]

Set k_2 to value according Miner Haibach method (k_2 = 2 * k_1 - 1).

Return type:

modified copy of self

miner_original()[source]

Set k_2 to inf according Miner Original method (k_2 = inf).

Return type:

modified copy of self

to_pandas()

Expose the pandas object of the signal.

Returns:

pandas_object – The pandas object representing the signal

Return type:

pd.DataFrame or pd.Series

Notes

The default implementation just returns the object given when instantiating the signal class. Derived classes may return a modified object or augmented, if they store some extra information.

By default the object is not copied. So make a copy yourself, if you intent to modify it.

transform_to_failure_probability(failure_probability)[source]

Transform the Wöhler curve to another failure probability.

Parameters:

failure_probability (float | None) – The new failure probablility. If None the object itself is returned

Returns:

transformed – The transformed WoehlerCurve object or self.

Return type:

WoehlerCurve