こんにちは(@t_kun_kamakiri)
Altairのサイトにこれまで商用利用としていたRadiossを2022年9月からオープンソース化するという内容の記事が投稿されていました。RadiossといえばLS-DYNAやPAM-Crashなどと並ぶAltairの衝突系(衝撃解析)の解析ソフトのイメージが強いですが、それが無償で使えるようになったというのはなかなかの衝撃でした。
今回解説するのはこちらの試験片を引張った際の挙動です。
Altair社が提供している無償のHyper View Playerでは以下のように試験片が破断する様子が可視化されていますが、ParaViewでは伸びるだけです。(設定次第かもしれません)
h3dも出力 pic.twitter.com/EChdGIcKsi
— カマキリ🐲CAE頑張る (@t_kun_kamakiri) October 21, 2023
Altair社のチュートリアルにHyperWorksを使った動画の実演がありますので、そちらを参考にしています。
RD-HWX-T: 1000 Tensile Test Setup
Radiossはキーワードというカードで設定を記述する必要があります。
そのため、GUI操作で順番にボタンをポチポチ押して行って設定するという感じではなく、適切な解析条件を自分で選択して解析設定を行う必要があります。
無償のOpenRadiossにはAltair社のHyper WorksのようなGUIが無いため、設定に苦労します。本記事では、できるだけテキスト編集をメインにOpenRadiossの基本的な設定を解説します。
WSL2
解析設定の手順
解析設定にはStarterファイルとEngineファイルの作成が必要です。
今回は以下のファイル名で設定ファイルを作成します。
- 001tensile_start_0000.rad:Starter ファイル(解析設定ファイル)
- 001tensile_start_0001.rad:Engine ファイル(解析制御と出力設定ファイル)
節点と要素
モデルはメッシュという要素に分割されて作られています。
今回は扱うモデルは厚みのないシェル要素で、下の絵のように要素は3つもしくは4つの節点から構成されています。
- 節点は節点のIDと$x,y,z$の座標を指定
- 要素は3つもしくは4つの節点IDを指定
節点が3つで構成される要素は「/SH3N」のキーワードを使い、節点が4つの場合は「/SHELL」というキーワードを使います。
同時に「/SH3N/3」と「/SHELL/3」と数字を書くことでPARTのIDを設定しています。
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 31 32 33 34 35 36 37 |
##------------------------------------------------------------------- ## NODES ##------------------------------------------------------------------- /NODE 13 100.0 0.0 0.0 14 100.0 2.0 0.0 15 100.0 4.0 0.0 16 100.0 5.975 0.0 (省略) ##------------------------------------------------------- ## Triangular Shell Elements ##------------------------------------------------------- 200 261 266 267 201 518 524 523 202 775 781 780 1007 981 986 987 ##-------------------------------------------------------- ## Quad Shell Elements ##-------------------------------------------------------- /SHELL/3 203 65 66 67 122 204 71 72 73 123 205 15 16 17 124 206 121 13 14 125 207 122 67 68 126 (省略) ##---------------------------------------------- ## Parts ##---------------------------------------------- ##HWCOLOR components 3 10 /PART/3 Tensile_coupon 0 0 ##------------------------------------------------------------------------------ ## End Of Radioss Block Deck ##------------------------------------------------------------------------------ /END |
PARTはシェル要素から構成されており、シェル要素は節点から構成されているという具合になっています。
節点、シェル要素(ソリッド要素)がPARTと紐づいていることを確認したら、次に行うのはPARTに対するプロパティと材料特性の設定です。
材料特性の設定
OpenRadiossには多くの材料特性の設定が用意されており、こちらの材料一覧から確認することができます。
今回使うのは以下の材料設定です。
則名 | グループ | タイプ | モデル概要 | 適用分野 | 粘性 | 直交異方性 | 組み込み熱オプション** | ひずみ速度 | 定式化 |
---|---|---|---|---|---|---|---|---|---|
/MAT/LAW2 (PLAS_JOHNS)* | 弾塑性材料 | 金属 | Johnson-Cook材料モデルを使用した等方性弾塑性材料 | 金属、弾塑性材料、軟鋼、ひずみ速度依存、温度依存、等方および移動硬化、熱硬化性、低合金鋼、ST52、およびDP600 | × | × | ○ | ○ | Lagrange |
この材料則は、Johnson-Cook材料モデルを使用して等方性弾塑性材料を表します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| ##HWCOLOR materials 1 5 /MAT/PLAS_JOHNS/1 Al # RHO_I 2.70000000000000E-06 # E Nu Iflag 60.4 0.33 1 # SIG_Y UTS EUTS EPS_p_max SIG_max0 0.09025 0.175 0.24 0.75 # c EPS_DOT_0 ICC Fsmooth F_cut Chard # m T_melt rhoC_p T_r |
以下、こちらからの引用です。
今回は以下のように設定しています。
- SIG_Y = 0.09025:降伏応力
- UTS = 0.175:工学応力UTS > σy
- EUTS = 0.24:UTSにおける工学ひずみ
- EPS_p_max = 0.75:破壊塑性ひずみ
- ICC(設定なし) :デフォルトは1なのでひずみ速度効果あり
つまり、蘇生ひずみεpが0.75を超えるとシェル要素が削除されるというモデル設定です。
さらに詳しく知りたい方はマニュアルを参照ください。
以上で材料設定が終わりです。
※ここでは材料特性の設定を記述しただけで、PARTとは紐づいていません。
プロパティの設定
シェル要素に対して要素の定義と厚みの設定を行います。
1 2 3 4 5 6 7 8 9 10 |
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| ##HWCOLOR properties 1 5 /PROP/SHELL/1 shell_1.7 # Ishell Ismstr Ish3n Idrill P_Thick_Fail 24 # Hm Hf Hr Dm Dn # N Istrain Thick Ashear Ithick Iplas 1.7 1 1 |
このキーワードは、/PROP/TYPE1(SHELL)から引用すると、
ほとんどがデフォルト設定でよく、すべて設定しなければならないというわけではありません。
大事なところは以下です。
- Ishell = 24の場合:QEPH (Quadrilateral ElastoPlastic Physical Hourglass Control) Element。弾塑性の4節点シェル要素の1点積分定式。アワーグラスの安定化
- Thick = 1.7:厚み設定
その他の設定は必要に応じてマニュアルを見て設定します。
※ここではプロパティの設定を記述しただけで、PARTとは紐づいていません。
PARTの作成
ここで先ほど記述したプロパティと材料特性をPARTに紐づけます。
PARTは要素(ビーム要素、シェル要素、ソリッド要素)で構成されており、PARTへはプロパティのIDと材料のIDを指定します。
設定は10カラム(10行)ごとに区切られているので、記述する位置を間違えないようにしましょう。
「#」で始まる行はコメント行になるので、設定のメモを残しておくとわかりやすいです。
1 2 3 4 5 6 7 |
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| ##HWCOLOR components 3 10 /PART/3 #part_title Tensile_coupon # prop_ID mat_ID Thick 1 1 |
これでPARTにプロパティと材料が紐づけられました。
解析設定としてPARTにプロパティと材料を指定すると使用されるため、例えば使う可能性があるプロパティや材料を設定の記述だけをテキストに書いておくこともできます。
その際はプロパティや材料はそれぞれIDが被らないようにしておきましょう。
剛体定義
節点グループをひとつの剛体として定義することができます。
「/RBODY」のキーワードを使います。
設定個所は「node_ID」と「grnd_ID」のみです。
以下のように「grnd_ID」には赤枠で囲まれた節点グループのIDを指定します。
ここでは節点グループIDを1としています。
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 |
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| #- 5. RIGID BODIES: #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /RBODY/1 New RBODY 1 # RBID ISENS NSKEW ISPHER MASS Gnod_id IKREM ICOG Surf_id 990 0 0 0 0 1 0 0 0 # Jxx Jyy Jzz 0 0 0 # Jxy Jyz Jxz 0 0 0 # Ioptoff Ifail 0 0 0 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /GRNOD/NODE/1 #title rigid1nodeset # item_ID1 item_ID2 item_ID3 item_ID4 item_ID5 item_ID6 item_ID7 item_ID8 item_ID9 item_ID10 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 636 637 640 641 642 643 684 685 686 733 734 735 736 741 742 743 744 745 746 747 748 749 750 768 769 831 832 833 834 835 836 837 838 839 840 841 842 843 846 847 848 849 890 891 892 939 940 941 942 947 948 949 950 951 952 953 954 955 956 974 975 |
このあたりの良い方法がないかもう少し考えます。
注意点ですが、キーワード「/RBODY」を指定した際に「RBID」で990が割り当てられています。
これは、選択した節点グループからなる剛体の重心による節点IDです。つまり、「/RBODY」を作成した時点で重心による節点を作成する必要があります。
なので選択した節点グループの重心を適当に計算して「/NODE」の一番最後に追加する必要があります。
1 2 3 4 5 6 7 8 9 |
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /NODE # node_ID Xc Yc Zc 13 100.0 0.0 0.0 14 100.0 2.0 0.0 (省略) 988 173.34 -5.79 0.0 989 172.62 -6.67 0.0 990 194.974615384615-1.3877787807814E-17 0.0#←これを追加 |
この節点IDは選択した節点グループの剛体の代表点のようになっているので、後々境界条件による荷重設定などが楽になります。
境界条件
並進・回転移動による境界
次に先ほど設定した剛体の代表節点ID = 990の並進・回転による境界条件を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| ##HMNAME LOADCOLS 1Bcs ##HWCOLOR loadcollectors 1 24 /BCS/1 move_x # Tra rot skew_ID grnod_ID 011 111 0 2 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /GRNOD/NODE/2 #title set1 # item_ID1 item_ID2 item_ID3 item_ID4 item_ID5 item_ID6 item_ID7 item_ID8 item_ID9 item_ID10 990 |
- Tra:x,y,zの拘束設定(0がフリー、1が拘束)
- rot:ωx、ωy、ωzの拘束設定(0がフリー、1が拘束)
なので節点グループID = 2はx方向のみ自由に動くことができる設定になっています。
節点グループID = 2は節点ID = 990になっているため、先ほど剛体設定した節点グループも同様にx方向のみ自由度を持っていることになります。
固定拘束による境界
同様に固定拘束の境界条件を設定します。
節点グループにおいては、先ほどと同様にLS-PrePostを使って「/GRNOD/NODE」を作成します。
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----| ##HMNAME LOADCOLS 2Bcs ##HWCOLOR loadcollectors 2 5 /BCS/2 LeftConstraint # Tra rot skew_ID grnod_ID 111 111 0 3 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /GRNOD/NODE/3 #title leftConstraint # item_ID1 item_ID2 item_ID3 item_ID4 item_ID5 item_ID6 item_ID7 item_ID8 item_ID9 item_ID10 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 122 123 126 127 128 129 170 171 172 219 220 221 222 227 228 229 230 231 232 233 234 235 236 254 255 318 319 320 321 322 323 324 325 326 327 328 379 380 383 384 385 386 427 428 429 476 477 478 479 484 485 486 487 488 489 490 491 492 493 511 512 |
Traとrotがすべて1なので以下の節点グループは完全に拘束されている設定になっています。
速度条件
続いて先ほど設定した剛体の代表点の節点ID = 990に x方向の強制速度を与える設定を行います。
- 強制速度は「/IMPVEL」
- 強制速度の関数は「/FUNCT」
- 強制速度を与える節点グループは「/GNOD/NODE」
にそれぞれIDで紐づけて設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| ##HMNAME LOADCOLS 3Impvel ##HWCOLOR loadcollectors 3 7 /IMPVEL/3 imposed_velocity #funct_IDT Dir skew_ID sensor_ID grnod_ID frame_ID Icoor 1 X 0 0 4 0 # Scale_x Scale_y Tstart Tstop 0.0 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| ##HWCOLOR curves 1 17 /FUNCT/1 #title curve1 # X Y 0.0 1.0 1.0 1.0 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /GRNOD/NODE/4 #title set2 # item_ID1 item_ID2 item_ID3 item_ID4 item_ID5 item_ID6 item_ID7 item_ID8 item_ID9 item_ID10 990 |
「/GRNOD/NODE/4」の節点グループは節点ID = 990のみですが、こちらは剛体の代表点なので節点ID = 990に強制速度を与えると節点グループも強制移動するという設定になります。
以上で解析設定の大枠は終了です。
節点の履歴
必要に応じて出力するようにしておくと便利です。
時刻歴応答「/TH」からはじまるキーワードを使います。
- /TH/ACCEL:加速度
- /TH/INTER:接触力など
- /TH/NODE:節点の変位、速度、加速度
- /TH/MONVOL:エアバッグの体積
- /TH/PART:重心位置、慣性モーメントなど
- /TH/RBODY:剛体の荷重
- /TH/RWALL:剛体壁の接触力
- /TH/SH3N:3節点のシェル要素の応力、ひずみ
- /TH/SHEL:4節点のシェル要素の応力、ひずみ
以下は節点座標の時刻歴を出力する設定です。
1 2 3 4 5 6 7 8 9 |
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /TH/NODE/1 #thgroup_name TH_Measurting_nodes # var_ID1 var_ID2 var_ID3 var_ID4 var_ID5 var_ID6 var_ID7 var_ID8 var_ID9 var_ID10 DEF DEF # node_ID skew_ID node_name 103 0 620 0 |
以下は剛体の荷重の出力設定です。
1 2 3 4 5 6 7 8 |
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /TH/RBODY/2 #thgroup_name T_RBODY # var_ID1 var_ID2 var_ID3 var_ID4 var_ID5 var_ID6 var_ID7 var_ID8 var_ID9 var_ID10 DEF # Obj_ID1 Obj_ID2 Obj_ID3 Obj_ID4 Obj_ID5 Obj_ID6 Obj_ID7 Obj_ID8 Obj_ID9 Obj_ID10 1 |
必要に応じて設定を追加すれば良いでしょう。
以上までの設定を001tensile_start_0000.radに保存します。
これがRadiossのstarter inputファイルになります。
Engine設定
以上まではRadiossのstarter inputファイルの設定でしたが、Radioss Engineファイルはシミュレーションの解析制御と出力を記述するファイルです。
ここでは最低限の設定だけを記述します。
- /RUN:計算実行に関するキーワード。40msまでの解析
- /DT/NODA/CST:モデルの時間ステップを増やすためのマススケーリング
- /TFILE:時刻歴ファイルであるT-ファイルの書き出し時間間隔
- /ANIM/DT:アニメーションファイル(A-ファイル)を出力する開始時間と出力間隔(0.5ms)
001tensile_start_0001.rad
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/RUN/001tensile_start/2/ 40.0000000000000 /VERS/2022 /DT/NODA/CST/0 0.900000000000000 0.000000000000000 0.000000000000000 /TFILE/0 0.010000000000000 /ANIM/DT 0.000000000000000 0.500000000000000 /ANIM/ELEM/EPSP /ANIM/ELEM/VONM /ANIM/ELEM/ENER /ANIM/ELEM/HOURG |
さらに詳しく知りたい方はマニュアルを参考にしましょう。
今回は歪みや応力もアニメーションにしたかったので以下を追加しました。
- /ANIM/ELEM/EPSP:塑性歪み
- /ANIM/ELEM/VONM:フォン・ミーゼス応力
- /ANIM/ELEM/ENER:比エネルギー密度
- /ANIM/ELEM/HOURG:アワーグラスエネルギー
解析実行
以上により解析の設定が終わりました。
解析に必要なファイルは以下の2つです。
- 001tensile_start_0000.rad:Starter ファイル(解析設定ファイル)
- 001tensile_start_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で読み込みます。
まとめ
本記事ではOpenRadiossの設定をできるだけマニュアルを見ながら、テキストのみで解析実行できるように解説を行いました。
途中、節点グループの作成には困りましたが無理やりLS-PrePostなどを使ったりしましたので、そのあたりの良い方法は要検討です。
また、解析途中にモデルの確認ができないというのはかなり解析設定を困難にしているので、せめてメッシュ状態などを確認できる標準的な方法が今後の課題です。
とはいえOpenRadioss自体は機能も豊富なので、今後の発展に期待大です。