主応力の応力幅を用いた疲労寿命の評価
今回は機械部品の静止時の主応力と稼働時の主応力を利用しての疲労寿命評価ツールを開発しました。
このトピックスはFemap APIを利用して、Femapから解析結果の取り出し、再加工したデータをFemapに書き戻す手法について紹介します。
アウトプットベクトルを取り出すメソッド
入力
なし
出力
概要
Femap with NX Nastran上で静止時および複数の稼働条件の解析を実施後、 各稼働条件と静止時の結果から主応力の応力幅を計算し、稼働時間、繰り返し数などの条件を加えて 累積損傷ダメージと疲労寿命を計算します。 最後に、累積損傷ダメージと疲労寿命の結果をFemapに書き戻してポスト処理を行います。Femapから特定の解析結果を取り出す
Femapから特定の解析結果を取り出すには、OutputオブジェクトのGetOutpuList関数を使います。 書式GetOutputList(ByRef listcount As Integer, ByRef ID As object, ByRef value as object);説明
アウトプットベクトルを取り出すメソッド
入力
なし
出力
- INT4 listcount
- ID 配列とvalue 配列の各エントリ数
- INT4 ID[0..N]
- アウトプットがあるノード/エレメントのID
- REAL8 value[0..N]
- ID 配列のノード/エレメントに当たるアウトプット値
' '特定のアウトプットベクトル結果を取り出す ' Dim listCount As Integer 'エレメント数を格納する Dim eids() As Integer = Nothing 'エレメントIDを格納する Dim values() As Double = Nothing 'エレメント結果を格納する Dim FeModel As object = GetObject(, "femap.model") 'Femapモデルオブジェクトを取得する Dim outvec As object = FeModel.feOutput 'アウトプットベクトルオブジェクトを初期化 With outvec .setID = 1 'アウトプットセットIDをセットする .Get(7020) 'Plate Top X Normal StressベクトルIDを指定する .GetOutputList(listCount, eids, values) '結果を取り出す End With
疲労寿命の計算
主応力幅の計算
二つの解析セットの主応力幅の計算すには、以下のように、各応力成分の差を計算後、応力成分から最大・最小主応力を求めます。
$$ \sigma_x = Case2\sigma_x – Case1\sigma_x \tag{1}$$
$$ \sigma_y = Case2\sigma_y – Case1\sigma_y \tag{2}$$
$$ \tau_{xy} = Case2\tau_{xy} – Case1\tau_{xy} \tag{3}$$
$$ \theta=\frac{1}{2} \tan^{-1}(\frac{2\tau_{xy}}{σ_x – σ_y}) \tag{4}$$
$$ 最大主応力 \sigma_1= \sigma_x \cos^2\theta + \sigma_y \sin^2\theta + 2\tau_{xy}\sin\theta \cos\theta \tag{5}$$
$$ 最小主応力 \sigma_3= \sigma_x \sin^2\theta + \sigma_y \cos^2\theta – 2\tau_{xy}\sin\theta \cos\theta \tag{6}$$
$$ 応力幅 A = 最大主応力\sigma_1 – 最小主応力\sigma_3 \tag{7} $$
疲労寿命の計算
各テストケースの頻度をμ、応力集中係数をα、SN線図の傾きをβ、基準応力をγ、基準繰り返し数をδとして定義した場合、 累積損傷ダメージおよび疲労寿命は以下の式で計算します。
$$ 累積損傷ダメージ: D = \sum{\left\{\frac{\mu_i}{\delta}\times\left(\frac{A_i}{\gamma}\right)^\beta\right\}} \tag{8}$$
$$ 疲労寿命: L=\frac{1}{D} \tag{9} $$
Femapへ結果を書き込み
計算後の結果をFemapに書き戻すには、PutOutputList関数を利用します。 以下Femapに結果書き戻すコードを示します。' 'Femapへ結果を書き込み ' Dim FeModel As object = GetObject(, "femap.model") 'Femapモデルオブジェクトを取得する Dim outvec As object = FeModel.feOutput 'アウトプットベクトルオブジェクトを初期化 Dim outset As object = FeModel.feOutputSet 'アウトプットセットオブジェクトを初期化 '新しいアウトプットセット作成 Dim setid As Integer = FeModel.Info_MaxID(femap.zDataType.FT_OUT_CASE) + 1 With outset .ID = setid .title = "計算後のアウトプットセット" .Put(setid) End With '計算後のアウトプットベクトルID(任意) Dim vecid As Integer = 7020 outset.Get(setid) '作成したアウトプットセットをアクティブ化 outvec.InitScalarAtElem(setid, vecid, "計算後の結果ベクトル", femap.zOutputType.FOT_STRESS, False) outvec.PutOutputList(listCount, eids, newvalues) With outvec .setID = setid .ID = vecid .Put(vecid) End With