レインフロー法による疲労被害評価ソフト(PYTHON版)

概要

ビーク値の時刻歴データからレインフロー計数を行う機能をGitHub上からパッケージとして提供する.パッケージ名はRBM,モジュール名HLrainflowである.アルゴリズムはHLrainflow法に基づく.
[注意]文献[1]に記載されているヒステリシスループ法のアルゴリズムは、実質レインフロー法の評価結果と同じ結果を与えますが、厳密に見ると少しだけ異なっていました.しかし、ヒステリシスループ法のアルゴリズムを部分的に変更するだけで、完全にレインフロー法と合致することを最近見出しました。ここで、提供するアルゴリズムは完全にレインフロー法に合致するはずです。アルゴリズムの詳細は「HLrainflow法アルゴリズム」のページを参照して下さい.
なお、下記サイトから提供されているrainflow.pyは、本サイト提供パッケージと全く同じ結果となるようです。そのアルゴリズムの相違点については調査していません。
rainflow_README.md

モジュールHLrainflowの利用法

  1. ターミナルモードで以下のコマンドを入力し,パッケージRBMをインストールする
    pip install git+https://github.com/ShinsukeSakai0321/RBM
  2. プログラム内で以下のimport文でHLrainflowモジュールを読み込む
    from RBM import HLrainflow as hloop
  3. 登録されているコマンドは以下のhelp文で確認できる
    help(hloop)

登録されているコマンド

コマンド内容
hloopself.Peakに対してレインフロー法を適用し,半波の情報を戻す
demo_dataサンプル波形データのリストを戻す
SetWave波形データをインスタンスにセット
GetRes波形計数処理後のデータの取得
Calc登録されている波形データに対し,ピーク値計算,波形計数処理を行う
GetPeak計算されたピーク値リストの取得
peak相続く3点の波形データからビーク値判定を行い,ピーク値を戻す
PeakCalcself.Waveのピーク値評価を行い結果をself.Peakに入力
SetPeakピーク値のリストpeakをself.Peakにセットする

例題1

ASTM E1049-85(2017) Rainflow Counting Example

            from RBM import HLrainflow as hloop
            Sample1=[-2,1,-3,5,-1,3,-4,4,-2]
            peak=Sample1
            hl=hloop.HL()
            hl.SetPeak(peak)
            halfR,halfM=hl.hloop()
            print('half range=',halfR)
            print('half mean=',halfM)    
        
この結果,ASTMに記載されているのと同じ以下の出力を確認する.
            half range= [4.0, 4.0, 3.0, 4.0, 8.0, 9.0, 8.0, 6.0]
            half mean= [1.0, 1.0, -0.5, -1.0, 1.0, 0.5, 0.0, 1.0]    
        
なお、ASTM E1049-85(2017)の例題については、下記サイトを参照して下さい。
Astm e 1049 85 standard practice for cycle counting in fatigue analysis

例題2

例題の検証サイト

            from RBM import HLrainflow as hloop
            Sample1=[2,-14,10,0,13,-9,11,-8,8,-9,15,-4,10,0,13,0]
            peak=Sample1
            hl=hloop.HL()
            hl.SetPeak(peak)
            halfR,halfM=hl.hloop()
            print('half range=',halfR)
            print('half mean=',halfM)    
        
この結果,サイトに記載されているのと同じ以下の出力を確認する.
            half range= [10.0, 10.0, 16.0, 16.0, 20.0, 20.0, 22.0, 22.0, 10.0, 10.0, 16.0, 29.0, 19.0, 17.0, 13.0]
            half mean= [5.0, 5.0, 0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 5.0, 5.0, -6.0, 0.5, 5.5, 4.5, 6.5]    
        

例題3

サンプルデータに対して波形計数処理を実施する

            from RBM import HLrainflow as hloop
            hl=hloop.HL()
            wave=hl.demo_data()
            hl.SetWave(wave)
            hl.Calc()
            halfR,halfM=hl.GetRes()
            print('half range=',halfR)
            print('half mean=',halfM)     
        
この結果,以下の出力を確認する.
            half range= [0.021989285714285715, 0.021989285714285715, 0.01238185975609756, 0.01238185975609756,
            0.08263670741023682, 0.04894241486068111, 0.018175837320574165]
            half mean= [-0.009969642857142856, -0.009969642857142856, 0.0049096798780487805, 0.0049096798780487805,
            0.003540412528647823, -0.013306733746130032, 0.0020765550239234447]     
        

例題4

サンプルデータに対してピーク値計算を実施する

            from RBM import HLrainflow as hloop
            hl=hloop.HL()
            wave=hl.demo_data()
            hl.SetWave(wave)
            hl.PeakCalc()
            peak=hl.GetPeak()
            print('peak value=',peak)
        
この結果,以下の出力を確認する.
            peak value= [0.04485876623376624, -0.03777794117647059, 0.001025, 
            -0.020964285714285713, 0.01110060975609756, -0.00128125, 
            0.011164473684210526, -0.007011363636363637]
        

例題5

ピーク値データを与えてレインフロー評価する

            from RBM import HLrainflow as hloop
            Sample1=[0,2,1,4,-3,2.5,-4,3,-5,0]
            peak=Sample1
            hl=hloop.HL()
            hl.SetPeak(peak)
            halfR,halfM=hl.hloop()
            print('half range=',halfR)
            print('half mean=',halfM) 
        
この結果,以下の出力を確認する.
            half range= [1.0, 1.0, 5.5, 5.5, 7.0, 7.0, 4.0, 9.0, 5.0]
            half mean= [1.5, 1.5, -0.25, -0.25, -0.5, -0.5, 2.0, -0.5, -2.5]
        

参考文献

[1]岡村弘之,板垣 浩著「強度の統計的取り扱い」,培風館, 4.3疲労の安全寿命