Skip to main content

OpenRainflow

Python 3.8+ License: MIT

Un package Python haute performance pour l'analyse de fatigue avec la méthode rainflow, les courbes d'endurance de l'Eurocode, et le calcul de dommage selon la règle de cumul linéaire de Miner.

Caractéristiques

  • Implémentation optimisée de l'algorithme rainflow avec Numba JIT compilation
  • 🚀 Haute performance : traitement rapide avec gestion mémoire optimale
  • 🔄 Parallélisation : support multi-threading pour grandes données
  • 📊 Courbes Eurocode : implémentation complète des courbes d'endurance EN 1993-1-9
  • 🔬 Calcul de dommage : règle de Miner pour évaluation de durée de vie
  • 🧪 Testé : couverture complète avec tests unitaires

Installation

pip install -e .

Pour le support de parallélisation :

pip install -e ".[parallel]"

Pour le développement :

pip install -e ".[dev]"

Utilisation rapide

import numpy as np
from openrainflow import rainflow_count, calculate_damage
from openrainflow.eurocode import EurocodeCategory

# Données de contrainte temporelle
stress_history = np.random.randn(10000) * 100 + 200

# Comptage rainflow
cycles = rainflow_count(stress_history)

# Définir la courbe d'endurance (catégorie 36 de l'Eurocode)
fatigue_curve = EurocodeCategory.get_curve('36')

# Calculer le dommage cumulé
damage = calculate_damage(cycles, fatigue_curve)

print(f"Dommage cumulé : {damage:.6f}")
print(f"Durée de vie estimée : {1/damage:.2f} répétitions" if damage > 0 else "Infini")

Algorithme Rainflow

L'algorithme rainflow est une méthode de comptage de cycles utilisée pour analyser les historiques de contraintes variables. Cette implémentation utilise :

  • ASTM E1049-85 : Standard de comptage rainflow
  • Numba JIT : compilation Just-In-Time pour performances optimales
  • NumPy : opérations vectorisées sur tableaux

Courbes d'endurance Eurocode

Implémentation des courbes S-N selon EN 1993-1-9 :

  • Catégories : 160, 125, 112, 100, 90, 80, 71, 63, 56, 50, 45, 40, 36
  • Support de la limite d'endurance
  • Correction pour contrainte moyenne (option)

Règle de Miner

Calcul du dommage cumulé selon :

[D = \sum_{i=1}^{k} \frac{n_i}{N_i}]

où :

  • (n_i) : nombre de cycles à l'amplitude (\Delta\sigma_i)
  • (N_i) : nombre de cycles à rupture pour (\Delta\sigma_i)

Structure du package

openrainflow/
├── __init__.py           # API principale
├── rainflow.py           # Algorithme rainflow
├── eurocode.py           # Courbes d'endurance Eurocode
├── damage.py             # Calcul de dommage Miner
├── parallel.py           # Traitement parallèle
└── utils.py              # Utilitaires

Performance

Benchmarks sur Intel Core i7 (8 threads) :

  • Rainflow counting : ~1M points/seconde (mode JIT)
  • Damage calculation : ~100k cycles/seconde
  • Memory usage : optimisé pour grandes séries (>10M points)

Contribution

Les contributions sont bienvenues ! Voir CONTRIBUTING.md.

Licence

MIT License - voir LICENSE pour détails.

Benchmarks

Des benchmarks comparatifs avec d'autres packages (fatpack, rainflow) sont disponibles dans le dossier benchmarks/.

# Installer les packages de comparaison
pip install fatpack rainflow matplotlib

# Exécuter tous les benchmarks
python benchmarks/run_all_benchmarks.py

# Ou individuellement
python benchmarks/benchmark_speed.py      # Vitesse
python benchmarks/benchmark_accuracy.py   # Précision
python benchmarks/benchmark_memory.py     # Mémoire
python benchmarks/benchmark_features.py   # Fonctionnalités

Résultats typiques : OpenRainflow est 3-4x plus rapide après compilation JIT.

Références

  1. ASTM E1049-85, "Standard Practices for Cycle Counting in Fatigue Analysis"
  2. EN 1993-1-9:2005, "Eurocode 3: Design of steel structures - Part 1-9: Fatigue"
  3. Miner, M. A. (1945), "Cumulative damage in fatigue"

Release files for openrainflow 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for openrainflow 1.0.0
File Size Uploaded
openrainflow-1.0.0.tar.gz 46.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for openrainflow 1.0.0
File Interpreter ABI Platform
openrainflow-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 70.1 kB

Release files / openrainflow-1.0.0.tar.gz

Download URL openrainflow-1.0.0.tar.gz
Size 46.8 kB
Tags Source
SHA-256 checksum
How to use checksums
130170a9c6e1f1c69ac085d70f2432b9f4c06fb02095e3775a29901e23fae49f
BLAKE2b-256 checksum
How to use checksums
51ba31be52c8cecb47ae51fc94d6f71d5dbf34b4f28075decd22d51cdf660372
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / openrainflow-1.0.0-py3-none-any.whl

Download URL openrainflow-1.0.0-py3-none-any.whl
Size 23.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b89c551545d858803e8942783bfef86cc9183e433c37f0fa33b5146d9388dd3e
BLAKE2b-256 checksum
How to use checksums
85a470e58fa481cf7af9d8679f0bb59e8ac55d89001899ec0b5771770345e262
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page