こんにちは(@t_kun_kamakiri)
Altairのサイトにこれまで商用利用としていたRadiossを2022年9月からオープンソース化するという内容の記事が投稿されていました。RadiossといえばLS-DYNAやPAM-Crashなどと並ぶAltairの衝突系(衝撃解析)の解析ソフトのイメージが強いですが、それが無償で使えるようになったというのはなかなかの衝撃でした。
本記事ではOpenradiossのインストールから計算実行までの一連の流れを示したいと思います。
オープンソースの中でも衝撃解析に関してはどれを使おうか悩むところでしたが、RadiossがOpenRadiossと名前を変えて使えるようになった今、これ一択だなという感じがしているので、早速使ってみようと思います。
- OpenRadiossのインストール
- OpenRadiossの例題(ケースファイル)
- OpenRadiossの計算実行
【環境】
Windows WSL2
Radiossのインストール
まずはこちらを除いてみましょう。
OpenRadiossのインストール方法から実行方法まで書かれています。
OpenRadiossのインストール方法は2通りあります。
ソースからビルドする方法
githubからソースコードを入手して手順に従ってスクリプトを実行していきます。
対応しているOSなどは確認。
- CentOS/RHEL 7, CentOS Stream 8, RHEL 8, Rocky Linux 8, Rocky Linux 9
- Ubuntu 20.0.4 or higher
- Windows Subsystem for Linux: OpenRadioss works with WSL/WSL2 Ubuntu 20.04 LTS, WSL2 Ubuntu 22.x
Windowsの方は手元のPCにWSL2を入れるとUbuntuが入っているので、そちらにインストールするのが簡単でしょう。
ただし、コンパイル作業にかなり時間がかかるので、手っ取り早く使いたい場合は次の方法の方が良いです。
バイナリ版を入手して解凍(こちらが簡単)
githubからOpenRadioss_linux64.zipをダウンロードして「/opt」以下に解凍します。
1 |
sudo unzip OpenRadioss_linux64.zip -d /opt/ |
権限sudoを付けて、「-d」オプションで解凍先を指定して解凍します。
「/opt/OpenRadioss/」以下は次のような構成になっています。
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
/opt/OpenRadioss ├── COPYRIGHT.md ├── exec │ ├── anim_to_vtk_linux64_gf │ ├── engine_linux64_gf │ ├── engine_linux64_gf_ompi │ ├── engine_linux64_gf_ompi_sp │ ├── engine_linux64_gf_sp │ ├── starter_linux64_gf │ ├── starter_linux64_gf_sp │ └── th_to_csv_linux64_gf ├── extlib │ ├── h3d │ │ └── lib │ │ └── linux64 │ │ └── libh3dwriter.so │ └── hm_reader │ ├── apr_license.txt │ ├── boost_license.txt │ ├── cpp-btree_license.txt │ ├── dtoa_license.txt │ ├── fdlibm_license.txt │ ├── hm_reader_license.txt │ ├── linux64 │ │ ├── libapr-1.so │ │ ├── libapr-1.so.0 │ │ └── libhm_reader_linux64.so │ ├── linuxa64 │ │ ├── libapr-1.0.so │ │ ├── libapr-1.so │ │ └── libhm_reader_linuxa64.so │ ├── openthreads_license.txt │ ├── phmap_license.txt │ ├── win64 │ │ ├── hm_reader_win64.dll │ │ ├── hm_reader_win64.lib │ │ ├── libapr-1.dll │ │ └── libapr-1.lib │ └── zlib_license.txt ├── hm_cfg_files │ ├── config │ │ └── CFG │ │ ├── Keyword971 │ │ └── radioss90 │ │ ├── INITIAL_GEOMETRY │ │ │ └── xref.cfg │ │ ├── LOADS │ │ │ ├── initemp.cfg │ │ │ └── sphbcs.cfg │ │ ├── MAT │ │ │ ├── 3d_comp_12.cfg │ │ │ ├── matl2_plas.cfg │ │ │ └── matl58_fabr_a.CFG │ │ └── data_hierarchy.cfg │ └── messages │ └── CONFIG │ ├── msg_arrays.cfg │ ├── msg_hw_radioss_reader.txt │ └── msg_table.cfg └── licenses 293 directories, 2185 files |
計算実行、アニメーション作成のためのvtk変換、csvファイルへの変換などのコマンドは「exec」にまとめられています。
これでインストール完了でOpenRadiossを使うための基本的な環境は整いました。
OpenRadiossに関する例題解説
こちらにOpenRadiossに関する例題解説を行った記事を投稿しています。
Hyper Worksという有償のGUIが無くてもで解説ができるように解説を書いていますので、興味ある方はチャレンジしてみてください。
Radiossのマニュアル
Radiossのマニュアルに関してはAltairのサイトから入手することができます。
※リンクは2022年版
- ユーザーズガイド
- 理論マニュアル(英文)
- ユーザーサブルーチン(英文)
- リファレンスガイド
- RADIOSS チュートリアルと例題
- よくある質問
LS-DYNAのマニュアル
LS-DYNAのマニュアルはLS-DYNA Supportから入手することができます。
- チュートリアル
- マニュアル
- リリースノート
- リンク
LS-DYNAのプリポスト
LS-DYNAをサポートしているプリポストのソフトとして無償で使えるLS-PrePostがあります。ANSYSのstudent版であれば約10万要素など制限がありますが、ソルバ付きでダウンロードが可能です(半年くらいは使える。使えなくなったらまたダウンロードすればよい)
- LS-PrePost:LS-DYNAのプリポスト
- LS-Run:LS-DYNAのソルバ実行
これらが使えるのでこの際にダウンロードしておきましょう。
※LS-PrePostに関しては最新版はUIが変わっているため、Old GUIで使いたい場合は「ver4.3」あたりを使うと良いでしょう。「F11」で切り替えることができます。
当ブログでは新しいGUIも使いながら説明をする予定です。
たぶん新しい方がこれから主流になるので新しい方を多めに使います。
OpenRadiossの例題(ケースファイル)
OpenRadiossの例題となるケースファイルがあると動作確認がすぐにできていいですね。
RadiossにはLS-DYNAのフォーマットを変換して計算実行してくれる機能があるため、RadiossとLS-DYNAのどちらかでモデルを作成しても良いです。
Radiossの例題
Radiossの例題は以下から入手できます。
Altair CommunityはAltair oneに登録するとマニュアルやチュートリアルファイルをダウンロードすることができます。
※現在は登録なしでもダウンロードできるようです。
この中から「RD-E:0700 振り子」がわかりやすかったので、本記事ではこちらを使いたいと思います。
LS-DYNAの例題
LS-DYNAの例題は以下から入手することができます。
- OpenRadiossのExample@LS-DYNA
- LS-DYNA Examples
- ANSYS/LS-DYNA student
- THUMS(人体モデル)
- National Highway Traffic Safety AdministrationHomepage Ratings Recalls Risky Driving Road Safety Equipment Technology & Innovation MORE INFO(自動車の衝突)
※ただし、Radiossの中でサポートしているLS-DYNAの機能は以下で調べることができます。
LS-DYNAのキーワードの説明に加えて、対応するRadiossのキーワードがリンクされているので、LS-DYNAユーザの方にもわかりやすいマニュアルになっています。
自分でもわかりやすく対応表を作成しましたのでご参考ください。
今回はOpenRadiossのExample@LS-DYNAから「Tensile Test Model in LS-DYNA® format」を使います。
OpenRadiossの計算実行
計算実行方法は今はPythonのGUIがありますので、リリース当初(2022年9月)よりいくぶんかハードルは下がりました。
PythonのGUIを使用する方法
解析に必要なファイルは以下の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-ファイル」が出力されているはずです。
スクリプトを利用する方法
こちら「RD-E:0700 振り子」のモデルの計算実行を行います。
必要なファイルは以下の2つです。
1 2 |
├── pendulum_0000.rad └── pendulum_0001.rad |
- starter_linux64_gf
-
engine_linux64_gf
-
anim_to_vtk_linux64_gf:vtk変換
-
th_to_csv_linux64_gf:csv変換
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash set -e export OPENRADIOSS_PATH=/opt/OpenRadioss export RAD_CFG_PATH="$OPENRADIOSS_PATH/hm_cfg_files" export LD_LIBRARY_PATH=$OPENRADIOSS_PATH/extlib/hm_reader/linux64/:$OPENRADIOSS_PATH/extlib/h3d/lib/linux64/:$LD_LIBRARY_PATH echo ** Run Starter ** $OPENRADIOSS_PATH/exec/starter_linux64_gf -i $1_0000.rad echo ** Run Engine ** $OPENRADIOSS_PATH/exec/engine_linux64_gf -i $1_0001.rad echo Done./run.sh $1 |
1 2 3 4 5 6 7 8 9 |
OPENRADIOSS_PATH="/opt/OpenRadioss" N=`find .| grep "A" | wc -l` N=$(($N-1)) for i in `seq 1 $N` do Num=`printf %03d $i` `"$OPENRADIOSS_PATH"/exec/anim_to_vtk_linux64_gf $1A"$Num" > $1A"$Num".vtk` done |
1 2 |
OPENRADIOSS_PATH="/opt/OpenRadioss" $OPENRADIOSS_PATH/exec/th_to_csv_linux64_gf $1T01 $1T01.csv |
1 2 3 |
./run.sh $1 ./make_vtk.sh $1 ./make_toCsv.sh $1 |
Allrun.shの実行は以下で行います。
1 |
./Allrun.sh pendulum |
今回は「pendulum」がファイル名なので位置パラメータとして指定することで$1がすべて「pendulum」に置き換わります。
計算が実行されると「pendulumA001、pendulumA002」と出力されます。
これがradiossのアニメーション用のファイルですが、可視化ソフトのParaViewでは読み込むことができないため「make_vtk.sh」スクリプトでvtkに変換しています。
ParaViewを起動して「pendulumA..vtk」を読み込みましょう。
— カマキリ🐲Python頑張る昆虫 (@t_kun_kamakiri) October 26, 2022
th_to_csv_linux64_gf によって、pendulumT01が変換されてpendulumT01.csvとして結果閲覧ができる形になってます。
LS-DYNAから変換
OpenRadiossはLS-DYNAのフォーマットからでも変換可能なので、LS-DYNAで用意したファイルでも計算を実行してみましょう。
今回はOpenRadiossのExample@LS-DYNAから「Tensile Test Model in LS-DYNA® format」を使います。
必要なファイルは以下の1つです。
1 |
├── zug_test3_RS.k |
「$OPENRADIOSS_PATH</span><span>/exec」にある
- starter_linux64_gf
-
engine_linux64_gf
-
anim_to_vtk_linux64_gf:vtk変換
-
th_to_csv_linux64_gf:csv変換
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash set -e export OPENRADIOSS_PATH=/opt/OpenRadioss export RAD_CFG_PATH="$OPENRADIOSS_PATH/hm_cfg_files" export LD_LIBRARY_PATH=$OPENRADIOSS_PATH/extlib/hm_reader/linux64/:$OPENRADIOSS_PATH/extlib/h3d/lib/linux64/:$LD_LIBRARY_PATH echo ** Run Starter ** $OPENRADIOSS_PATH/exec/starter_linux64_gf -i $1.k echo ** Run Engine ** $OPENRADIOSS_PATH/exec/engine_linux64_gf -i $1_0001.rad echo Done./run.sh $1 |
Radiossファイルと違い拡張子が.kなので$OPENRADIOSS_PATH/exec/starter_linux64_gf -i $1.k
の1文が変わっています。
※LS-DYNAの拡張子は何でもよいため「.k」「.key」「.inc」などで使われる場合が多いです。
1 2 3 4 5 6 7 8 9 |
OPENRADIOSS_PATH="/opt/OpenRadioss" N=`find .| grep "A" | wc -l` N=$(($N-1)) for i in `seq 1 $N` do Num=`printf %03d $i` `"$OPENRADIOSS_PATH"/exec/anim_to_vtk_linux64_gf $1A"$Num" > $1A"$Num".vtk` done |
1 2 |
OPENRADIOSS_PATH="/opt/OpenRadioss" $OPENRADIOSS_PATH/exec/th_to_csv_linux64_gf $1T01 $1T01.csv |
1 2 3 |
./run.sh $1 ./make_vtk.sh $1 ./make_toCsv.sh $1 |
Allrun.shの実行は以下で行います。l
1 |
./Allrun.sh zug_test3_RS |
今回は「zug_test3_RS」がファイル名なので位置パラメータとして指定することで$1がすべて「zug_test3_RS」に置き換わります。
計算が実行されると「zug_test3_RSA001、zug_test3_RSA002」と出力されます。
これがradiossのアニメーション用のファイルですが、可視化ソフトのParaViewでは読み込むことができないため「make_vtk.sh」スクリプトでvtkに変換しています。
ParaViewを起動して「zug_test3_RSA..vtk」を読み込みましょう。
— カマキリ🐲Python頑張る昆虫 (@t_kun_kamakiri) October 26, 2022
zug_test3_RST01.csvがデータの出力結果です。
並列計算(OpenMPI)
OpenMPIは以下の2行を追加するだけで並列計算ができます。
1 2 |
export KMP_STACKSIZE=400m export OMP_NUM_THREADS=4 |
環境変数「OMP_NUM_THREADS=4」でスレッド数を指定しています。
スクリプトにまとめると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/bash set -e export OPENRADIOSS_PATH=/opt/OpenRadioss export RAD_CFG_PATH="$OPENRADIOSS_PATH/hm_cfg_files" export LD_LIBRARY_PATH=$OPENRADIOSS_PATH/extlib/hm_reader/linux64/:$OPENRADIOSS_PATH/extlib/h3d/lib/linux64/:$LD_LIBRARY_PATH export KMP_STACKSIZE=400m export OMP_NUM_THREADS=4 echo ** Run Starter ** $OPENRADIOSS_PATH/exec/starter_linux64_gf -i $1.k echo ** Run Engine ** $OPENRADIOSS_PATH/exec/engine_linux64_gf -i $1_0001.rad echo Done./run.sh $1 |
(おまけ)WSLでOpenMPIの設定から実行
「/opt/OpenRadioss」にRadissをインストールした場合は以下のように環境変数を指定する。
1 2 3 4 5 6 |
export OPENRADIOSS_PATH=/opt/OpenRadioss export RAD_CFG_PATH=/opt/OpenRadioss/hm_cfg_files export LD_LIBRARY_PATH=$OPENRADIOSS_PATH/extlib/hm_reader/linux64/:$OPENRADIOSS_PATH/extlib/h3d/lib/linux64/:$LD_LIBRARY_PATH export KMP_STACKSIZE=400m export OMP_NUM_THREADS=4 |
環境変数設定から計算実行までをスクリプトにまとめました。
例題としてIce Cubeを使います。
※スクリプトは適当な部分があるので、修正もしていきますので参考程度に・・・
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/bash set -e export OPENRADIOSS_PATH=/opt/OpenRadioss export RAD_CFG_PATH="$OPENRADIOSS_PATH/hm_cfg_files" export LD_LIBRARY_PATH=$OPENRADIOSS_PATH/extlib/hm_reader/linux64/:$OPENRADIOSS_PATH/extlib/h3d/lib/linux64/:$LD_LIBRARY_PATH export KMP_STACKSIZE=400m export OMP_NUM_THREADS=4 echo ** Run Starter ** $OPENRADIOSS_PATH/exec/starter_linux64_gf -i $1_0000.rad -np 1 echo ** Run Engine ** $OPENRADIOSS_PATH/exec/engine_linux64_gf -i $1_0001.rad echo Done./run.sh $1 |
vtkファイルへの変換は以下のスクリプトにします。
1 2 3 4 5 6 7 8 9 |
OPENRADIOSS_PATH="/opt/OpenRadioss" N=`find .| grep "A" | wc -l` for i in `seq 1 $N` do Num=`printf %03d $i` `"$OPENRADIOSS_PATH"/exec/anim_to_vtk_linux64_gf $1A"$Num" > $1A"$Num".vtk` done `rm -r $1A"$Num".vtk` |
csvファイル変換は以下のスクリプト
1 2 |
OPENRADIOSS_PATH="/opt/OpenRadioss" $OPENRADIOSS_PATH/exec/th_to_csv_linux64_gf $1T01 $1T01.csv |
そして、これらのスクリプトを一括で実行すために「Allrnn.sh」とまとめます。
1 2 3 |
./run.sh $1 ./make_vtk.sh $1 ./make_toCsv.sh $1 |
Allrun.shの実行は以下で行います。l
1 |
./Allrun.sh cube_TYPE7 |
今回は「cube_TYPE7」がファイル名なので位置パラメータとして指定することで$1がすべて「cube_TYPE7」に置き換わります。
まとめ
本記事ではOpenRadiossに関する、
- インストール方法
- マニュアル、例題の入手場所
- 計算実行から可視化
- 並列計算
の基本的な情報をまとめました。
LS-DYNA書籍
LS-DYNA for Engineers: A Practical Tutorial Book (FE analysis for Engineers)
LS-DYNA for Beginners: An insight into Ls-Prepost and Ls-Dyna