こんにちは(@t_kun_kamakiri)
Altairのサイトにこれまで商用利用としていたRadiossを2022年9月からオープンソース化するという内容の記事が投稿されていました。RadiossといえばLS-DYNAやPAM-Crashなどと並ぶAltairの衝突系(衝撃解析)の解析ソフトのイメージが強いですが、それが無償で使えるようになったというのはなかなかの衝撃でした。
今回解説するのはこちらのエアバッグが膨張する解析です。
設定としては適当で「とりあえず計算できればいいや!」くらいの感覚ですので実現象を再現しうる精度にはなっていないでしょうが、設定方法は参考になると思います。
Altairの例題集は大変参考になります。
しかし、モデル作成からRadiossは調べてキーワードというカードで設定を記述する必要があります。
そのため、GUI操作で順番にボタンをポチポチ押して行って設定するという感じではなく、適切な解析条件を自分で選択して解析設定を行う必要があります。
無償のOpenRadiossにはAltair社のHyper WorksのようなGUIが無いため、設定に苦労します。本記事では、できるだけテキスト編集をメインにOpenRadiossの基本的な設定を解説します。
WSL2
解析設定の手順
解析設定にはStarterファイルとEngineファイルの作成が必要です。
今回は以下のファイル名で設定ファイルを作成します。
- 200_main_0000.rad:Starter ファイル(解析設定ファイル)
- 200_main_0001.rad:Engine ファイル(解析制御と出力設定ファイル)
単位系
物理量の値の大きさには単位系を意識する必要があります。
- 長さ:mm,mなど
- 時間:sec, msecなど
- 質量:kg, ton, gなど
同じ長さのものでも10という値だけでは10mmなのか、10mなのかで1000倍の長さに違いがあります。
国際単位系(略称:SI単位系)で書く場合も多いですが、それは専門分野によって変わります。
特に今回扱う自動車衝突においては車の質量はton(トン)=1000kg(キログラム)の世界なので質量の単位をkgにすると桁が大きすぎて煩雑に見えたりします。
一方で長さに関しては、mm(ミリメートル)単位の方がわかりやすかったりします。
時間に関しては数100ms(ミリ秒) = 0.1秒で事が終わる世界感です。
ゆえに、単位系としては
- mm-ton-sec
- mm-kg-ms
のどちらかを選択することが多いでしょう。
今回はmm-kg-msの単位系で解析設定を行います。
この単位系によって物理量(パスカル、エネルギー、速度、加速度)がどのような単位系になるかによって変わるので、今使っている単位系を意識しないと値が1000倍違うなど平気で起こってしまうので注意が必要です。
モデル作成
まずは解析の設定を200_main_0000.radに記述していきます。
これがRadiossのstarter inputファイルになります。
モデルの作成は前回の記事ではLS-DYNAを用いて作ったものをOpenRadioss用に変換して使うことにします。
ちなみにLS-DYNAでのモデル作成部分はこちらの動画を参考にしています。
以上で作成したモデルはLS-DYNAフォーマットでのエアバッグモデルです。
こちらにも作り方のメモを残しました。
完成状態はこちら。
ちなみにOpenRadiossにはLS-DYNAで解析設定を作ってもRadiossに変換して計算することもできます。
LS-DYNAの全ての機能を使えるわけではありませんが、対応しているキーワードなら使うことができます。
LS-DYNAフォーマットをOpenRadiossフォーマットに変換
作成したLS-DYNAのメッシュデータをOpenRadiossフォーマットに変換して使う必要があります。
LS-DYNAからOpenRadiossへの直接変換できる無償ソフトはなさそうでしたので、今回はエクセルを使って変換しました。
規則を理解していれば変換は容易でしょう。
- モデル(下の絵はミッフィーちゃん)にPART IDというのを振り分けられている。
- PARTはELEMENT(要素)と呼ばれるメッシュ要素から構成されている
- 1つ1つのELEMENTはNODE(節点)から構成されている
これらを理解してLS-DYNAとOpenRadiossで作るべきフォーマットを比較すると以下のようになります。
シェル要素の変換
節点の変換
これにミッフィーちゃんのモデルも追加して以下のような解析モデルになっています。
材料特性の設定
材料特性は以下のようにします。
エアバッグ | /MAT/LAW19 (FABRI) | 弾性直交異方性材料。シェル要素のみで使用可能。エアバッグ繊維のモデル化に使用される。 |
固定プレート | /MAT/LAW13 (RIGID) (廃止) | パートを剛体としてモデル化。 |
エアバッグ反力板 | /MAT/LAW13 (RIGID) (廃止) | ↑ |
ミッフィーちゃん | /MAT/LAW13 (RIGID) (廃止) | ↑ |
材料モデルにはいくつかの注意点があります。
- /MAT/LAW19 (FABRI)は/PROP/TYPE9 (SH_ORTH)(直交異方性シェル要素)に使う必要がある
- /MAT/LAW13 (RIGID) (廃止)は廃止されているモデルのようで、RBODYの使用することが推奨されています。
おそらく/MAT/LAW13 (RIGID) (廃止)だけでは剛体になっているだけで、モノ自体は力を拘束されていないので必ず拘束条件とセットで使う必要があり、手間だからでしょう。
しかし、非推奨になっていることを知らなかったので、今回は/MAT/LAW13 (RIGID) (廃止)と合わせて境界を拘束する/BCSを使ってモデル作成しています。
適宜マニュアルを見て対応していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /MAT/FABRI/1 Airbag Fabric # RHO_I 7.84E-06 # E11 E22 NU12 0.3 0.2 # G12 G23 G31 0.04 0.04 0.04 # R_E ZEROSTRESS FSCALE_POR SENS_ID 0.01 1.0 1 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /MAT/RIGID/2 RIGID # RHO_I 7.8E-06 # E nu 200.0 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /SENSOR/TIME/1 #sens_title TTF # Tdelay 0.0 |
「/MAT/FABRI」については少し詳しく見てみましょう。
赤文字で書いた設定は今回は特に設定で使われていないので、意味がありません。
ZEROSTRESSはエアバッグが折り畳んだりして初期に応力が発生している場合に元の形状はどうだったかを参照させる参照モデルがある場合に使用します。
さらに、自動車が衝突した直後が0msで、エアバッグが作動するまで衝突直後から10~20msと時間差が作動するためその遅れ時間(Time To Fire)を設定しておくと解析上便利になります。
それはセンサー/SENSOR/TIME」で指定しています。
見ての通り遅れ時間は0msとしています。
プロパティの設定
シェル要素に対して要素の定義と厚みの設定を行います。
エアバッグ | /PROP/TYPE9 (SH_ORTH) | 直交異方性シェルロパティの定義。 |
固定プレート | /PROP/TYPE1(SHELL) | 3節点または4節点のシェル要素で使用。Belytschko、QBAT、またはQEPHのシェル定式化が利用可能。 |
エアバッグ反力板 | /PROP/TYPE1(SHELL) | ↑ |
ミッフィーちゃん | /PROP/TYPE1(SHELL) | ↑ |
適宜マニュアルを見て対応していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /PROP/SH_ORTH/1 airbag sction shell # Ishell Ismstr Ish3n Idrill P_Thick_Fail 4 11 # Hm Hf Hr Dm Dn # N ISTRAIN Thick Ashear ITHICK IPLAS 1 1 0.4 # Vx Vy Vz Phi 1.0 0.0 0.0 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /PROP/SHELL/6000000 RIGID # Ishell Ismstr Ish3n Idrill P_Thick_Fail 24 0 # Hm Hf Hr Dm Dn # N Istrain Thick Ashear Ithick Iplas 1.0 |
エアバッグの材料特性「/MAT/LAW19 (FABRI)」と合わせて使われる「/PROP/TYPE9 (SH_ORTH)」プロパティは設定項目が多く理論も難しいので、詳しくはマニュアルを見ましょう。
※ここではプロパティの設定を記述しただけで、PARTとは紐づいていません。
PARTの作成
ここで先ほど記述したプロパティと材料特性をPARTに紐づけます。
PARTは要素(ビーム要素、シェル要素、ソリッド要素)で構成されており、PARTへはプロパティのIDと材料のIDを指定します。
設定は10カラム(10行)ごとに区切られているので、記述する位置を間違えないようにしましょう。「#」で始まる行はコメント行になるので、設定のメモを残しておくとわかりやすいです。
エアバッグ | PART ID = 1,2 | prop_ID = 1 | mat_ID = 1 |
固定プレート | PART ID = 3 | prop_ID = 6000000 | mat_ID = 2 |
エアバッグ反力板 | PART ID = 6000000 | prop_ID = 6000000 | mat_ID = 2 |
ミッフィーちゃん | PART ID = 6000001 | prop_ID = 6000000 | mat_ID = 2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /PART/1 #part_title Rear Panel # prop_ID mat_ID Thick 1 1 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /PART/2 #part_title Front Panel # prop_ID mat_ID Thick 1 1 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /PART/3 #part_title INF # prop_ID mat_ID Thick 6000000 2 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /PART/6000000 #part_title miffy # prop_ID mat_ID Thick 6000000 2 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /PART/6000001 #part_title miffy # prop_ID mat_ID Thick 6000000 2 |
これでPARTにプロパティと材料が紐づけられました。
解析設定としてPARTにプロパティと材料を指定すると使用されるため、例えば使う可能性があるプロパティや材料を設定の記述だけをテキストに書いておくこともできます。
その際はプロパティや材料はそれぞれIDが被らないようにしておきましょう。
拘束条件
エアバッグの底面はエアバッグを収納するための箱があり(今はエアバッグを折り畳んでいないので収納していませんが)、それを動かないように拘束する必要があります。
1 2 3 4 5 6 7 8 | #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /BCS/1 INF BC # Tra rot skew_ID grnod_ID 111 111 0 3 /GRNOD/PART/3 INF BC 3 |
以下のような関係性があります。
その他の方法としては「/GRNOD/NODE」のように節点を1つずつ記述するという方法もありますが、グループ化したい節点を全て記述する必要があり面倒です。部分的に節点をグループ化したい場合には役に立ちます。
エアバッグガス注入の設定
エアバッグの膨張の解析の最も重要な部分ですね。
解析の設定には大きく3つのキーワードを設定する必要があります。
- /MONVOL/AIRBAG1:混合気体の1つエアバッグ
- /MAT/GASカードで指定される気体材料
- /PROP/INJECT1(質量分率の指定)または/PROP/INJECT2(モル分率の指定)
※「/MONVOL/COMMU1」はエアバッグが複数の部屋(チャンバーという)に分かれている場合に、チャンバー間でガスのやり取りを行うキーワードです。
非常にわかりにくいですが「/MONVOL/AIRBAG1」をまず設定します。
「/MONVOL/AIRBAG1」で、どのサーフェスで囲まれた領域をエアバッグの部屋とするかのサーフェスID、熱伝達係数、初期ガスと注入するガスなどのID、ガス抜けなどのNvent(ガス抜け穴。面積指定もできる※今回は使わない)を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /MONVOL/AIRBAG1/1 #monvol_title airbag gas #surf_IDex H_conv 1 0.00000000000000E-06 # Ascale_T Ascale_P Ascale_S Ascale_A Ascale_D 1.0 1.0 1.0 1.0 # MAT_ID MU Pext T0 Iequi Ittf 3 0.011.01300000000000E-04 293.0 0 3 # Njet 1 #inject_ID Sens_ID Ijet node_ID1 node_ID2 node_ID3 2 1 0 0 0 0 # Nvent Nporsurf 1 # surf_IDv Iform Avent Bvent vent_title 0 1 0 1.0 phi30 # Tstart Tstop dPdef dtPdef I_dtPdef 0.01.00000000000000E+30 0.0 0.0 0 # fct_ID_t fct_ID_P fct_ID_A FScale_t FScale_P FScale_A 3 0 0 1.0 1.0 1.0 #fct_ID_t' fct_ID_P' fct_ID_A' Fscale_t' Fscale_P' Fscale_A' 0 0 0 1.0 1.0 1.0 |
続いて初期のガス成分(air)と注入するガス成分を設定します。
注入するガス成分は同じ空気の物性値を使っています。
設定するのは、
- MW:モル質量[kg/mol]
- Cpa~CPe:比熱の温度依存性の係数
$C_{p}=C_{pa}+C_{pb}T+C_{pc}T^2+C_{pd}T^3+\frac{C_{pe}}{T^2}+C_{pf}T^4$
これらの係数は以下の熱物性データベースから入手するのが良いでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /MAT/GAS/MASS/3 air # MW 0.0288 # Cpa Cpb Cpc Cpd Cpe 1007.0 # Cpf /MAT/GAS/MASS/4 injection gas # MW 0.0288 # Cpa Cpb Cpc Cpd Cpe 1007.0 # Cpfつ |
続いて、注入するガスに対して「質量流」と「注入温度[K]」を指定します。
- 質量流:今回の単位系はmm-kg-msで設定しているため、単位は[kg/ms]として値を設定します。
Fscale_Mを1.0E-3にすることでスケールがかかるので、この後説明する「/FUNCT」は[kg/s]のままの値でも良いでしょう。 - 注入温度[K]:温度はKとして入力します。
1 2 3 4 5 6 7 | #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /PROP/INJECT1/2 injection gas mass # N_gases Iflow Ascale_T 1 # Mat_ID fun_ID_M fun_ID_T Fscale_M Fscale_T 4 1 2 1.0E-03 1.0 |
そして、質量流と温度のテーブルデータを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /FUNCT/1 #title inf mass flow # X Y 0.0 0.0 30.0 20.0 40.0 20.0 50.0 0.0 150.0 0.0 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /FUNCT/2 #title inf temp # X Y 0.0 1100.0 150.0 1100.0 |
この際に、以下のような関係性を意識する必要があります。
これでエアバッグの解析の設定は終了です。
紆余曲折あってエアバッグの膨張の解析ができるということは確認した。
ただ、異方性材料特性、ガス成分、ガス量とかわからない限りおもちゃモデルにしかなってませんが。#OpenRadioss pic.twitter.com/UGvJr1dlAr— カマキリ🐲CAE頑張る (@t_kun_kamakiri) November 12, 2023
実機とCAEが合うかどうかは物性データなどが必要ではあります。
エアバッグ内の熱力学変数の出力
「/TH/MONVOL」によってエアバッグ内の圧力、温度、密度、体積・・・・と色々な熱力学変数の時刻歴を出力できます。
1 2 3 4 5 6 7 8 | #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /TH/MONV/1 #thgroup_name Chambers # var_ID1 var_ID2 var_ID3 var_ID4 var_ID5 var_ID6 var_ID7 var_ID8 var_ID9 var_ID10 DEF GAS # Obj_ID1 Obj_ID2 Obj_ID3 Obj_ID4 Obj_ID5 Obj_ID6 Obj_ID7 Obj_ID8 Obj_ID9 Obj_ID10 1 |
計算実行後に「200_mainT01.csv」が出力されているので確認してみましょう。
圧力と容量を確認するとこんな感じです。
- 圧力[kPa]:ゲージ圧にしたいので「×1000000-101.325」にしてゲージ圧[kPa]にする
- 容量[L]:「mm3」の単位になっているので「÷1000000」としてリットル[L]にする
Engine設定
以上まではRadiossのstarter inputファイルの設定でしたが、Radioss Engineファイルはシミュレーションの解析制御と出力を記述するファイルです。
ここでは最低限の設定だけを記述します。
- /RUN:計算実行に関するキーワード。50msまでの解析
- /DT/NODA/CST:モデルの時間ステップを増やすためのマススケーリング
- /TFILE:時刻歴ファイルであるT-ファイルの書き出し時間間隔
- /ANIM/DT:アニメーションファイル(A-ファイル)を出力する開始時間と出力間隔(0.5ms)
200_main_0001.rad
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /RUN/200_main/1/ 50.0000000000000 /STOP 0.000000000000000 100000000.000000 0.000000000000000 1 1 0 /TFILE/4 0.500000000000000 /ANIM/DT 0.000000000000000 0.500000000000000 /ANIM/BRICK/TENS/STRESS /ANIM/ELEM/EPSP /ANIM/ELEM/ENER /ANIM/SHELL/TENS/STRESS/UPPER /ANIM/SHELL/TENS/STRESS/LOWER /ANIM/SHELL/EPSP/UPPER /ANIM/SHELL/EPSP/LOWER /ANIM/VECT/ACC /ANIM/VECT/DISP /ANIM/VECT/VEL |
さらに詳しく知りたい方はマニュアルを参考にしましょう。
解析実行
以上により解析の設定が終わりました。
解析に必要なファイルは以下の2つです。
- 200_main_0000.rad:Starter ファイル(解析設定ファイル)
- 200_main_0001.rad:Engine ファイル(解析制御と出力設定ファイル)
OpenRadiossの計算実行は、こちらで公開されているPythonで作られたGUIを使うと簡単に行えます。
WSLを使っているのでLinux環境での実行方法を参考にします。
これで計算投入用のGUIが立ち上がるので、アニメーションとデータ出力の項目にチェック(②)を入れて計算を実行します。
ここにチェックを入れておくことでA-ファイル(アニメーション用ファイル)はParaViewでも閲覧できるvtk形式に変換し、T-ファイル(データ用ファイル)はcsvファイルに変換してくれます。
OpenRadiossのインストール先は下記のスクリプトで自身の環境に合わせる必要があります。
openradioss_run_script_ps.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/bin/bash set -e pushd "$(dirname "$0")" >/dev/null REL_PATH="../" pushd "$REL_PATH" >/dev/null ABS_PATH=/mnt/d/OpenRadioss/OpenRadioss #$PWD popd >/dev/null export OPENRADIOSS_PATH=$ABS_PATH export RAD_CFG_PATH=$OPENRADIOSS_PATH/hm_cfg_files export RAD_H3D_PATH=$OPENRADIOSS_PATH/extlib/h3d/lib/linux64 export LD_LIBRARY_PATH=$OPENRADIOSS_PATH/extlib/h3d/lib/linux64:$OPENRADIOSS_PATH/extlib/hm_reader/linux64 export OMP_STACKSIZE=400m export PATH=$OPENRADIOSS_PATH/extlib/hm_reader/linux64:$PATH export PATH=$OPENRADIOSS_PATH/extlib/intelOneAPI_runtime/linux64:$PATH (省略) |
問題なく計算が進んでいれば大量の「A-ファイル」が出力されているはずです。
結果処理
先ほど計算実行時に「Anim-vtk」にチェックを入れたのでA-ファイルはvtk形式に変換されているので、それらをParaViewで読み込みます。
エアバッグの理論
補足でエアバッグの理論計算も書いておきます。
エアバッグの膨張の理論は基本的には熱力学第一法則に従う方程式を解いているにすぎません。ここでは計算の概要を紹介してイメージしてもらえればよいかと思います。
以下の容器をエアバッグと見立てて、その容器に熱を加えてピストンが動くというのをイメージすれば、エアバッグが膨張していく原理がわかるかと思います。
まず、エアバッグが膨張するガス発生装置のエネルギーを考えます。
- $\dot{m}_{inf}$:注入する質量流
- $T_{inf}$:注入する温度
- $C_{p inf}$:注入するガスの定圧比熱
3つの掛け算がエンタルピーとしてエネルギー注入されて、初期状態の空気のガスと混合してエアバッグが膨張するという計算を行っています。
ゆえに、注入ガスの設定には上記3つの設定が必ず必要になります。
あとは項に対してエネルギーを考えていきます。
内部エネルギーは基本的には熱力学的は変数(圧力、温度、密度など・・・)です。
- 変数:4つ:圧力P_0 、内部エネルギーU、温度T_0、容量V_0である。
- 方程式:3つ:①、②、③
ピストンの運動量変化を考えることで、もうひとつ式を追加する。
あとはこれらの式を連立させて解きます。
このような内部計算ができるソフトがLS-DYNA、PAM-Crash、Radioss(OpenRadioss)、MADYMOなどなど・・・にはあります。
ちなみに膨張しきった際にエアバッグの布の張力がかかるので、必要であればそれも式に加えると原理上計算できるというわけですね。
まとめ
本記事ではOpenRadiossの設定をできるだけマニュアルを見ながら、テキストのみで解析実行できるように解説を行いました。
今回はエアバッグを膨張させただけですが、今度はミッフィーちゃんに初速度を与えて壁にぶつかる直前にエアバッグを膨らませて無事衝突を回避するという解析を行います。
OpenRadioss自体は機能も豊富なので、今後の発展に期待大です。
参考文献
以下自動車の衝突安全のバイブルを紹介します。
版が異なりますが、微妙に内容が違うのでどちらも持っておいても良いでしょう。