ビーク値の時刻歴データからレインフロー計数を行う機能をGitHub上からパッケージとして提供する.パッケージ名はRBM,モジュール名HLrainflowである.アルゴリズムはHLrainflow法に基づく.
[注意]文献[1]に記載されているヒステリシスループ法のアルゴリズムは、実質レインフロー法の評価結果と同じ結果を与えますが、厳密に見ると少しだけ異なっていました.しかし、ヒステリシスループ法のアルゴリズムを部分的に変更するだけで、完全にレインフロー法と合致することを最近見出しました。ここで、提供するアルゴリズムは完全にレインフロー法に合致するはずです。アルゴリズムの詳細は「HLrainflow法アルゴリズム」のページを参照して下さい.
なお、下記サイトから提供されているrainflow.pyは、本サイト提供パッケージと全く同じ結果となるようです。そのアルゴリズムの相違点については調査していません。
rainflow_README.md
コマンド | 内容 |
---|---|
hloop | self.Peakに対してレインフロー法を適用し,半波の情報を戻す |
demo_data | サンプル波形データのリストを戻す |
SetWave | 波形データをインスタンスにセット |
GetRes | 波形計数処理後のデータの取得 |
Calc | 登録されている波形データに対し,ピーク値計算,波形計数処理を行う |
GetPeak | 計算されたピーク値リストの取得 |
peak | 相続く3点の波形データからビーク値判定を行い,ピーク値を戻す |
PeakCalc | self.Waveのピーク値評価を行い結果をself.Peakに入力 |
SetPeak | ピーク値のリストpeakをself.Peakにセットする |
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)の例題については、下記サイトを参照して下さい。
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]
サンプルデータに対して波形計数処理を実施する
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]
サンプルデータに対してピーク値計算を実施する
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]
ピーク値データを与えてレインフロー評価する
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]