こんにちは(@t_kun_kamakiri)
Altairのサイトにこれまで商用利用としていたRadiossを2022年9月からオープンソース化するという内容の記事が投稿されていました。RadiossといえばLS-DYNAやPAM-Crashなどと並ぶAltairの衝突系(衝撃解析)の解析ソフトのイメージが強いですが、それが無償で使えるようになったというのはなかなかの衝撃でした。
リリースから2年経って、OpenRadiossを使いやすくするためのツールが出てきました。
ツールや解析設定の例題集を下記の記事にまとめています。
ぜひどうぞ。
本記事は、inpファイルからradioss形式への変換プログラムの紹介です。
inpファイルからradioss形式への変換プログラムを試したらできたので紹介します
定期的にgithubを確認していますがToolsフォルダにinp2radというのができていました(2024年12月時点)
フォルダで一目でわかるようにinpファイルをradiossフォーマットに変換するプログラムであることがわかりますね。
inpファイルからradiossへの変換は無事できたっぽい。
ただそのまま計算させたらメッシュが爆発した….
それについては変換が失敗したのではなく、単純にOpenRadiossの設定の問題なので中身を確認して解消することにする。#OpenRadiosshttps://t.co/yjwkoaTCAO https://t.co/FwwEgguuZl pic.twitter.com/pHWYfdufcw— カマキリ🐲CAE頑張る (@t_kun_kamakiri) December 29, 2024
ご覧の通りradiossフォーマットに変換はできましたが、計算は上手く行きませんでした。
これはOpenRadiossの設定の問題なので後で確認するとして、本記事ではinpファイルからradiossファイルへの変換の環境構築だけを紹介します。
環境:WSL2のUbuntu 22.04.5 LTS(※Windows環境もできますのでgithubを参照ください)
githubの日本語訳
ChatGPTに要約してもらいました。
inp2rad (INP to Radioss Converter)
このスクリプトは、AbaqusのINPファイルをRadiossの入力デッキに変換するためのPythonスクリプトです。INP形式のデータをRadioss形式に変換することで、シミュレーションデータの互換性を確保し、移行プロセスを容易にします。
主な機能
- 材料特性の変換: INPファイルの材料特性をRadioss形式に変換します。
- メッシュデータの対応: ノードと要素のメッシュデータを対応付け、適切に出力します。
- 境界条件の処理: 境界条件や荷重条件を読み込み、Radioss形式で表現します。
全てのキーワードがサポートされているわけではないですが、今後サポート対象のキーワードは増えていくことでしょう。
環境構築
githubコードのクローン
githubのコードをクローンします。
1 |
git clone https://github.com/OpenRadioss/Tools.git |
必要になるのはToolsフォルダだけです。
install.shの実行
フォルダ移動します。
1 |
cd Tools/input_converters/inp2rad |
このフォルダの中に「install.sh」ファイルがありますが、中身はいたって簡単なプログラムです。
1 2 3 4 5 6 7 8 9 |
#!/bin/bash cd inp2rad pip3 install . cd .. cd build pyinstaller --onefile ..\inp2rad\inp2rad.py python3 install.py cd .. |
./install.shを実行しても良いですが、失敗する可能性があるので、上記一つずつ実行していくのが良いでしょう。
※失敗しなければ以下の流れは特に理解しておく必要はないです。
pyinstallerを使って実行ファイルの作成
pyinstaller
を使用すると、inp2rad/inp2rad.py
を実行可能ファイルに変換できます。これにより、Python環境がインストールされていないシステムでも、直接コマンドとして inp2rad
を実行できるようになり、非常に便利です。
このpyinstallerまわりで失敗する可能性があります。
例えば、pyinstaller
が出力したエラーメッセージの一部を示すと、
The ‘typing’ package is an obsolete backport of a standard library package and is incompatible with PyInstaller.
これは「typing
パッケージは標準ライブラリのバックポート版であり、PyInstallerとは非互換である」という意味で、古い typing
パッケージを削除すれば問題が解消することを示しています。
なので、以下コマンドでtyping
パッケージを削除します。
1 |
python3 -m pip uninstall typing |
必要に応じて再度pyinstaller
をインストールします。
1 |
pip uninstall pyinstaller |
インストールできていることは以下のコマンド確認します。
1 2 |
pyinstaller --version 6.11.1 |
pyinstaller
を実行すると…
1 |
pyinstaller --onefile ../inp2rad/inp2rad.py |
以下のログが出てきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
426 INFO: PyInstaller: 6.11.1, contrib hooks: 2024.11 426 INFO: Python: 3.10.12 428 INFO: Platform: Linux-5.15.167.4-microsoft-standard-WSL2-x86_64-with-glibc2.35 428 INFO: Python environment: /usr 435 INFO: wrote /mnt/c/work/001_CAE/openradioss/Tools/input_converters/inp2rad/build/inp2rad.spec 492 INFO: Module search paths (PYTHONPATH): ['/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/kamakiri/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/local/lib/python3.10/dist-packages/AnimtoD3plot-1.0-py3.10.egg', '/usr/local/lib/python3.10/dist-packages/rich-13.7.1-py3.10.egg', ... (省略)... 8137 INFO: Copying bootloader EXE to /mnt/c/work/001_CAE/openradioss/Tools/input_converters/inp2rad/build/dist/inp2rad 8148 INFO: Appending PKG archive to custom ELF section in EXE 8639 INFO: Building EXE from EXE-00.toc completed successfully. |
特にエラーらしきものが見当たらなかったら無事実行ファイルができています。
実行ファイルはbuild/dist/inp2rad
です。
inp2radのインストール
次は install.sh
のpython install.py
の部分ですがプログラムの中身は以下です。
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 |
# Copyright 1986-2024 Altair Engineering Inc. # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the "Software"), # to deal in the Software without restriction, including without limitation # the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR # IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. import shutil import os import platform def find_program_path(program_name): program_path_file = shutil.which(program_name) program_path = os.path.dirname(program_path_file) if program_path: return program_path else: return None # Example usage current_platform = platform.system() if current_platform == "Windows": file = "dist/inp2rad.exe" else: file = "dist/inp2rad" program_path=find_program_path("pip") print("program_path: ", program_path) shutil.copy(file, program_path) |
いろいろと書いておりますが中身は、やっていることはpipコマンドの場所/usr/binを調べて、そこにpyinstallerで作成したdist/inp2radをコピーしているだけです。
つまり、以下をしていることになります。
1 2 |
cp -r dist/inp2rad /usr/bin/ |
これくらいなら手動でもいい気がしますね。
以上でinp2radコマンドがPythonがインストールされていない環境でも、かつどのフォルダからでも使うことができます。
1 2 |
which inp2rad /usr/bin/inp2rad |
何をしたのかを念のため整理しておきますとと、
1. システム全体でのアクセス
/usr/bin/
は、Linuxシステムで共通の実行可能ファイルを配置するディレクトリの1つで、デフォルトでPATH
環境変数に含まれています。inp2rad
を/usr/bin/
に配置することで、どのディレクトリにいても単純に以下のようにコマンドを実行できます。
2. 利便性の向上
- ユーザーがスクリプトの場所を意識する必要がなくなり、ディレクトリを移動したりフルパスを入力する手間が省けます。
例えば、python /path/to/inp2rad/inp2rad.py
といった長いコマンドを書く必要がなくなります。 - 他のユーザーも同じコマンドで使えるため、統一された使い方が可能になります。
inpファイルからRadiiossフォーマットへ変換
では、ここからは適当に用意したinpファイルからradiossフォーマットへ変換できるか試していきます。
失敗
まずはこちらのYoutubeにあるようなPrePoMaxで作成した熱構造解析の例を試してみます。おそらく対応していないキーワードがありそうなので変換に失敗するでしょう。
PrePoMaxで事前にinpファイルに変換しておきます。
適当な場所にinpファイルを出力しておきます。
solve.inp
ファイル名で出力しています。
inpファイルはこんな感じです。
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 |
** ** Heading +++++++++++++++++++++++++++++++++++++++++++++++++ ** *Heading Hash: p4ukktEq, Date: 12/29/2024, Unit system: MM_TON_S_C ** ** Nodes +++++++++++++++++++++++++++++++++++++++++++++++++++ ** *Node 1, 0.00000000E+000, 0.00000000E+000, 0.00000000E+000 2, 0.00000000E+000, 0.00000000E+000, 2.00000000E+002 3, 0.00000000E+000, 1.00000000E+003, 0.00000000E+000 ...(省略).. ** ** Elements ++++++++++++++++++++++++++++++++++++++++++++++++ ** *Element, Type=C3D10, Elset=Solid_part-1 1, 2347, 5905, 2328, 3954, 17234, 17235, 14330, 17236, 17237, 17238 2, 2213, 2195, 5840, 2206, 13842, 17239, 17240, 13850, 13819, 17241 ...(省略).. ** Node sets +++++++++++++++++++++++++++++++++++++++++++++++ ** *Nset, Nset=Internal-1_const 1, 3, 5, 12, 13, 14, 15, 16, 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, 64, 65, 66, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 200, 201, 208, 209, 210, 211, 212, 213, ...(省略).. ** Materials +++++++++++++++++++++++++++++++++++++++++++++++ ** *Material, Name=Fe *Elastic 210000, 0.293 *Expansion, Zero=20 1.17E-05 *Conductivity 83.5 |
以下のコマンドで変換用のGUIを立ち上げます。
1 |
inp2rad |
GUIが起動したら先ほど出力したinpファイルを選択します。
するとログが出力されて何やらサポートされていない旨のエラーが見られます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Starting Timer: 0.000 seconds Transforms Done: 0.455 seconds Nodes Read: 0.479 seconds Nodes Done: 0.610 seconds Dist Coups Prep Done: 0.677 seconds Nsets Read: 0.756 seconds Nsets Done: 0.757 seconds Materials Done: 0.939 seconds Props/Parts Done: 1.172 seconds Elset Prep Done: 1.211 seconds Elements Done: 1.369 seconds Elsets Done: 1.373 seconds Segments Done: 1.495 seconds Surf Sets Done: 1.557 seconds Friction Done: 1.581 seconds Contacts Done: 1.661 seconds Tied Contacts Done: 1.716 seconds Functions Done: 1.723 seconds ------------------------------------------------------------ Error in inp2rad: unsupported format string passed to NoneType.__format__ |
失敗する場合はこんな感じになるということです。
成功
次は単純な平板の引張りの解析にしてみます。
先ほど同様inpファイルを出力します。
solve.inp
ファイル名で出力しています。
inp2radのコマンドでinpファイルを選択すると以下のログが出力されます。
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 |
Converting .inp file, Please wait... Starting Timer: 0.000 seconds Transforms Done: 0.066 seconds Nodes Read: 0.069 seconds Nodes Done: 0.081 seconds Dist Coups Prep Done: 0.086 seconds Nsets Read: 0.091 seconds Nsets Done: 0.091 seconds Materials Done: 0.105 seconds Props/Parts Done: 0.121 seconds Elset Prep Done: 0.123 seconds Elements Done: 0.133 seconds Elsets Done: 0.133 seconds Segments Done: 0.135 seconds Surf Sets Done: 0.139 seconds Friction Done: 0.141 seconds Contacts Done: 0.147 seconds Tied Contacts Done: 0.151 seconds Functions Done: 0.151 seconds Boundaries Done: 0.153 seconds Ini Conditions Done: 0.155 seconds Gravity Done: 0.156 seconds MPC-Springs Done: 0.158 seconds Spring Beams Done: 0.158 seconds Part Rbodies Done: 0.158 seconds Coupling Rbodies Done: 0.164 seconds DisCoups Done: 0.164 seconds Engine File Done: 0.174 seconds Writing Radioss Files ----------> Materials Written: 0.179 seconds ADMAS Written: 0.179 seconds Parts/Props Written: 0.179 seconds Nodes Written: 0.198 seconds Elements Written: 0.204 seconds Sets Written: 0.204 seconds BCS/Loads Written: 0.204 seconds Functions Written: 0.204 seconds PART RBODYs Written: 0.204 seconds COUP RBODYs Written: 0.204 seconds RBE3s Written: 0.204 seconds SpringTies Written: 0.204 seconds SpringBeams Written: 0.204 seconds Tied Contacts Written: 0.204 seconds Contacts Written: 0.204 seconds Surf Sets Written: 0.204 seconds Transforms Written: 0.204 seconds Engine Written: 0.209 seconds Conversion Completed. Output written to solve_0000.rad and solve_0001.rad Total Processing time: 0.209 seconds Press Enter to exit... |
変換成功しているっぽいですね。
solve.inp
ファイルと同じフォルダにsolve0000.rad
とsolve0001.rad
が出力されていればOKです。
solve0000.rad
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 |
#RADIOSS STARTER # Input deck generated by inp2rad python script, please verify correct input! # REPORT ISSUES to https://github.com/OpenRadioss/Tools/discussions /BEGIN solve 2023 0 Mg mm s Mg mm s #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| #- 1. MATERIALS: #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /MAT/ELAST/1 Material-1 # RHO_I 8e-09 0 # E nu 210000 0 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| #- 2. PARTS #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /PART/1 Solid_part-1 # prop mat subset 1 1 0 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| #- 3. PROPS #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /PROP/SOLID/1 Internal_Selection-1_Solid_Section-1 # Isolid Ismstr Icpre Itetra10 Inpts Itetra4 Iframe dn 24 -1 -1 2 0 3 0 .1 # q_a q_b h LAMBDA_V MU_V 1.1 .05 0 0 0 # dt_min Vdef_min Vdef_max ASP_max COL_min 0.0 0.01 100.0 100.0 0.01 #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| #- 4. NODES: #---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----| /NODE 1 0 0 0 2 0 0 1 3 0 30 0 |
中身を見る限り上手く変換されていそうです。
計算実行
計算実行方法は以下の記事でもまとめています。
計算実行も問題なく行えています。
しかし、時間刻みがえらく小さく、計算の進みが遅いです。
確認するとメッシュが爆発している感じでした・・・・
とりあえずinpファイルからradiossフォーマットへの変換は上手くいっているのでひとまず良しとしましょう!
まとめ
今回はinpファイルからradiossフォーマットへの変換の手順を示しました。
変換できるキーワードは現時点では限られていますが、今後増えていくだろうと思います。
AbaqusやPrePoMax(Calculix)でできていたことをわざわざOpenRadiossに変換して使う意味はあまりないかもしれないですが、OpeRadiossには無償で使える専用のGUIがないためモデル作成のたたき台を作るのには便利かもしれないです。