# Rainflow-counting algorithm

The rainflow-counting algorithm is used in calculating the fatigue life of a component in order to convert a loading sequence of varying stress into a set of constant amplitude stress reversals with equivalent fatigue damage. The method successively extracts the smaller interruption cycles from a sequence, which models the material memory effect seen with stress-strain hysteresis cycles. This simplification allows the number of cycles until failure of a component to be determined for each rainflow cycle using either Miner's rule to calculate the fatigue damage, or in a crack growth equation to calculate the crack increments. Both methods give an estimate of the fatigue life of a component. In cases of multiaxial loading, critical plane analysis can be used together with rainflow counting to identify the uniaxial history associated with the plane that maximizes damage. The algorithm was developed by Tatsuo Endo and M. Matsuishi in 1968.
The rainflow method is compatible with the cycles obtained from examination of the stress-strain hysteresis cycles. When a material is cyclically strained, a plot of stress against strain shows loops forming from the smaller interruption cycles. At the end of the smaller cycle, the material resumes the stress-strain path of the original cycle, as if the interruption had not occurred. The closed loops represent the energy dissipated by the material.

## History

The rainflow algorithm was developed by T. Endo and M. Matsuishi (an M.S. student at the time) in 1968 and presented in a Japanese paper. The first English presentation by the authors was in 1974. They communicated the technique to N. E. Dowling and J. Morrow in the U.S. who verified the technique and further popularised its use.
Downing and Socie created one of the more widely referenced and utilized rainflow cycle-counting algorithms in 1982, which was included as one of many cycle-counting algorithms in ASTM E1049-85.
Igor Rychlik gave a mathematical definition for the rainflow counting method, thus enabling closed-form computations from the statistical properties of the load signal.

## Algorithms

There are a number of different algorithms for identifying the rainflow cycles within a sequence. They all find the closed cycles and may be left with half closed residual cycles at the end. All methods start with the process of eliminating non turning points from the sequence. A completely closed set of rainflow cycles can be obtained for a repeated load sequence such as used in fatigue testing by starting at the largest peak and continue to the end and wrapping around to the beginning.

### Four point method

This method evaluates each set of 4 adjacent turning points A-B-C-D in turn:
* Any pair of points B-C that lies within or equal to A-D is a rainflow cycle.
* Remove the pair B-C and re-evaluate the sequence from the beginning.
* Continue until no further pairs can be identified.

### Pagoda roof method

This method considers the flow of water down of a series of pagoda roofs. Regions where the water will not flow identify the rainflow cycles which are seen as an interruption to the main cycle.
* Reduce the time history to a sequence of (tensile) peaks and (compressive) valleys.
* Imagine that the time history is a template for a rigid sheet (pagoda roof).
* Turn the sheet clockwise 90° (earliest time to the top).
* Each "tensile peak" is imagined as a source of water that "drips" down the pagoda.
* Count the number of half-cycles by looking for terminations in the flow occurring when either:
** case (a) It reaches the end of the time history;
** case (b) It merges with a flow that started at an earlier tensile peak; or
** case (c) An opposite tensile peak has greater or equal magnitude.
* Repeat step 5 for compressive valleys.
* Assign a magnitude to each half-cycle equal to the stress difference between its start and termination.
* Pair up half-cycles of identical magnitude (but opposite sense) to count the number of complete cycles. Typically, there are some residual half-cycles.

#### Example

The stress history in Figure 2 is reduced to tensile peaks in Figure 3 and compressive valleys in Figure 4. From the tensile peaks in Figure 3:
* The first half-cycle starts at tensile peak 1 and terminates opposite a greater tensile stress, peak 3 (case c); its magnitude is 16 MPa (2 - (-14) = 16).
* The half-cycle starting at peak 9 terminates where it is interrupted by a flow from earlier peak 8 (case b); its magnitude is 16 MPa (8 - (-8) = 16).
* The half-cycle starting at peak 11 terminates at the end of the time history (case a); its magnitude is 19 MPa (15 - (-4) = 19).
Similar half-cycles are calculated for compressive stresses (Figure 4) and the half-cycles are then matched.
| Stress (MPa) | Whole cycles | Half cycles |
| 10 | 2 | 0 |
| 13 | 0 | 1 |
| 16 | 1 | 1 |
| 17 | 0 | 1 |
| 19 | 0 | 1 |
| 20 | 1 | 0 |
| 22 | 1 | 0 |
| 29 | 0 | 1 |