Skip to main content

High-performance fatigue analysis package with rainflow counting, Eurocode fatigue curves, and Miner's damage calculation

Project description

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"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openrainflow-1.0.0.tar.gz (46.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openrainflow-1.0.0-py3-none-any.whl (23.3 kB view details)

Uploaded Python 3

File details

Details for the file openrainflow-1.0.0.tar.gz.

File metadata

  • Download URL: openrainflow-1.0.0.tar.gz
  • Upload date:
  • Size: 46.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for openrainflow-1.0.0.tar.gz
Algorithm Hash digest
SHA256 130170a9c6e1f1c69ac085d70f2432b9f4c06fb02095e3775a29901e23fae49f
MD5 7dcf7e49cac7b3c96b06bc1918b83d66
BLAKE2b-256 51ba31be52c8cecb47ae51fc94d6f71d5dbf34b4f28075decd22d51cdf660372

See more details on using hashes here.

File details

Details for the file openrainflow-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: openrainflow-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 23.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for openrainflow-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b89c551545d858803e8942783bfef86cc9183e433c37f0fa33b5146d9388dd3e
MD5 40df48e58ff8e15ee6a87c48121cd877
BLAKE2b-256 85a470e58fa481cf7af9d8679f0bb59e8ac55d89001899ec0b5771770345e262

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page