rainflow#
Rainflow cycle counting algorithms for fatigue analysis.
Implements: - ASTM rainflow (Nieslony’s algorithm, standard practice). - Four-point rainflow (Amzallag et al. 1994).
Also includes utilities to find turning points and extrema.
References
[1] WAFO Toolbox https://www.maths.lth.se/matstat/wafo/ [2] PyWAFO wafo-project/pywafo [3] Rychlik (1987), “A new definition of the rainflow cycle counting method” [4] Amzallag et al. (1994), “Standardization of the rainflow counting method”
See also
findtpFind indices to turning points.
findextremaFind indices to local maxima and minima.
findcrossFind indices to level crossings.
- py_fatigue.cycle_count.rainflow.rainflow(data: ndarray | list, time: ndarray | list | None = None, method: str = 'astm', extended_output: bool = True) ndarray | Tuple#
Returns the cycle-count of the input data calculated through the rainflow method (ASTM or four-point).
- Parameters:
- Return type:
Union[np.ndarray, tuple]
- py_fatigue.cycle_count.rainflow.findcross(x: ndarray, v=0.0, kind=None) ndarray#
Return indices to level v up and/or downcrossings of a vector
- Parameters:
x (array_like) – vector with sampled values.
v (scalar, real) – level v.
kind (string) – defines type of crossing returned. Possible options are - ‘d’ : downcrossings only - ‘u’ : upcrossings only - None : All crossings will be returned
- Returns:
ind – indices to the crossings in the original sequence x.
- Return type:
array-like
Example
>>> from matplotlib import pyplot as plt >>> import py_fatigue.wafo.misc as wm >>> ones = np.ones >>> np.allclose(findcross([0, 1, -1, 1], 0), [0, 1, 2]) True >>> v = 0.75 >>> t = np.linspace(0,7*np.pi,250) >>> x = np.sin(t) >>> ind = wm.findcross(x,v) # all crossings >>> np.allclose(ind, [ 9, 25, 80, 97, 151, 168, 223, 239]) True
>>> ind2 = wm.findcross(x,v,'u') >>> np.allclose(ind2, [ 9, 80, 151, 223]) True >>> ind3 = wm.findcross(x,v,'d') >>> np.allclose(ind3, [ 25, 97, 168, 239]) True
>>> t0 = plt.plot(t,x,'.',t[ind],x[ind],'r.', t, ones(t.shape)*v) >>> t0 = plt.plot(t[ind2],x[ind2],'o') >>> plt.close('all')
- py_fatigue.cycle_count.rainflow.findextrema(x: ndarray) ndarray#
Return indices to minima and maxima of a vector
- Parameters:
x (vector with sampled values.)
- Returns:
ind
- Return type:
indices to minima and maxima in the original sequence x.
Examples
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> import wafo.misc as wm >>> t = np.linspace(0,7*np.pi,250) >>> x = np.sin(t) >>> ind = wm.findextrema(x) >>> np.allclose(ind, [ 18, 53, 89, 125, 160, 196, 231]) True
>>> a = plt.plot(t,x,'.',t[ind],x[ind],'r.') >>> plt.close('all')
- py_fatigue.cycle_count.rainflow.findtp(x: ndarray) ndarray#
Return indices to turning points (tp) of ASTM rainflow filtered data.
- Parameters:
x (vector) – signal to be filtered.
- Returns:
ind – indices to the turning points in the original sequence.
- Return type:
Union[np.ndarray, None]
Examples
>>> import matplotlib.pyplot as plt >>> import py_fatigue.wafo.misc as wm >>> t = np.linspace(0,30,500).reshape((-1,1)) >>> x = np.hstack((t, np.cos(t) + 0.3 * np.sin(5*t))) >>> x1 = x[0:100,:] >>> itp = wm.findtp(x1[:,1]) >>> tp = x1[itp,:] >>> np.allclose(itp, [ 5, 18, 24, 38, 46, 57, 70, 76, 91, 98, 99]) True
>>> a = plt.plot( ... x1[:,0], x1[:,1], tp[:,0], tp[:,1], 'ro') >>> plt.close('all')
See also
- py_fatigue.cycle_count.rainflow.findrfc_astm(tp: ndarray, t: ndarray | None = None) ndarray#
Return rainflow counted cycles
Nieslony’s Matlab implementation of the ASTM standard practice for rainflow counting ported to a Python C module.
- Parameters:
tp (array-like) – vector of turning-points (NB! Only values, not sampled times)
t (array-like, optional) – vector of sampled times
- Returns:
sig_rfc – array of shape (n,3) or (n, 5) with: sig_rfc[:,0] Cycles amplitude sig_rfc[:,1] Cycles mean value sig_rfc[:,2] Cycle type, half (=0.5) or full (=1.0) sig_rfc[:,3] cycle_begin_time (only if t is given) sig_rfc[:,4] cycle_period_time (only if t is given)
- Return type:
array-like
- py_fatigue.cycle_count.rainflow.findrfc_fourpoint(tp: ndarray, t: ndarray | None = None) ndarray#
Return rainflow counted cycles using the four-point method.
- Parameters:
tp (array-like) – vector of turning-points (NB! Only values, not sampled times)
t (array-like, optional) – vector of sampled times
- Returns:
sig_rfc – array of shape (n,3) or (n, 5) with: sig_rfc[:,0] Cycles amplitude sig_rfc[:,1] Cycles mean value sig_rfc[:,2] Cycle type, half (=0.5) or full (=1.0) sig_rfc[:,3] cycle_begin_time (only if t is given) sig_rfc[:,4] cycle_period_time (only if t is given)
- Return type:
array-like