OpenRadiossに入門してくりまんじゅうを引っ張ってみた
「なつやすみのじゆうけんきゅう」として最近流行り(?)のOpenRadiossを少しだけ触ってみました。
概要
お盆休みにOpenRadiossに入門してみたのでその備忘メモです。
私は構造・衝突系CAE関連の知識が全くないど素人のためまずは先駆者の方々が公開されている事例の写経から始めようと思い、下記リンクの内容を写経しつつ引っ張り対象をくりまんじゅう(※)に変えただけのごく簡単な事例から始めてみました。
※ちいかわ(©nagano)のキャラクター。お酒が大好き。
具体的にはくりまんじゅうの足を完全拘束して頭頂部を+Z方向に引っ張ったときのシミュレーションにトライします。
このくりまんじゅうのモデルは以前OpenFOAMを触り始めていた時にFreeCADの練習として作成したものです。
今回はモデルは作成済としてradioss形式への変換部分だけ行います。
下記は以前OpenFOAMの練習としてシミュレーションしたくりまんじゅう周りの流れです(今回の内容とは全く関係なし^p^)
くりまんじゅうのFreeCADファイルをradioss形式に変換
ここがいきなり最大の難関でした。
LS-PrePostというアプリが必要とのことでwindows版をインストールしたところ、下記のような横線が入りまくる現象が発生。調べたところ一部のノートPCで発生する現象らしく、特に解決策が見つからなかったです。
色々試した結果良くならなかったのであきらめてVirtualBoxでUbuntuDesktop環境を作成してその中でLinux版のLS-PrePostを起動させるとなんとか動いてくれました。。。
無事LS-PrePostが立ち上がってくれたら、あらかじめFreeCADから出力しておいたくりまんじゅうのSTLファイルをインポートします。
File -> Import -> STL Fileで下図のようにインポートできました。
今回はくりまんじゅうの両足を固定し、頭頂部の一部を+Z方向に引っ張るのでそのためのNODEグループを取得しておきます。参考資料記載の方法にて問題なく取得できました。
続いてファイルをエクスポートします。
File -> Save As -> Save Keyword As...で名前を付けて保存できました。
エクスポート後のLS-DYNAキーワード形式のファイルをエディタで開くと下記のようになっています。(長いので一部省略)
これをradioss形式に整形していきます。
$# LS-DYNA Keyword file created by LS-PrePost(R) 2024/R2(4.11.8)-25Jul2024
$# Created on Aug-15-2024 (14:45:35)
*KEYWORD
*TITLE
$# title
LS-DYNA keyword deck by LS-PrePost
*NODE
$# nid x y z tc rc
1 -0.6187184 -4.813584e-33 2.03033 0 0
2 -0.645409 0.0274296 2.00598 0 0
3 -0.6423947 0.0139188 2.009115 0 0
...(省略)...
3641 0.2292127 -0.9956937 1.434578 0 0
3642 0.2260767 -0.9712356 1.436686 0 0
3643 0.2260767 -0.9962356 1.436686 0 0
*ELEMENT_SHELL
$# eid pid n1 n2 n3 n4 n5 n6 n7 n8
1 1 1 2 3 3 0 0 0 0
2 1 1 3 4 4 0 0 0 0
3 1 1 4 5 5 0 0 0 0
...(省略)...
6041 1 3640 3630 3632 3632 0 0 0 0
6042 1 3640 3642 3630 3630 0 0 0 0
6043 1 3640 3632 3638 3638 0 0 0 0
*SET_NODE_LIST
$# sid da1 da2 da3 da4 solver its -
1 0.0 0.0 0.0 0.0MECH 1
$# nid1 nid2 nid3 nid4 nid5 nid6 nid7 nid8
208 209 215 253 257 276 277 281
285 287 288 289 291 283 286 273
...(省略)...
*END
starterファイルと同じ場所にkurimanju_tensile_tutorial.incファイルを作成してそこに書き込んでいきます。
NODEの部分は参考資料記載の方法でradioss形式に整形して転記。 この時剛体指定するくりまんじゅうの頭頂部分の代表点を9999番NODEとして追記しておきます。(後でstarterファイル内に追記しても可)
#RADIOSS STARTER
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/BEGIN
kurimanju_tensile_tutorial.inc
2022 0
Mg mm s
Mg mm s
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/NODE
1 -0.6187184 -4.813584e-33 2.03033
2 -0.645409 0.0274296 2.00598
3 -0.6423947 0.0139188 2.009115
...
3641 0.2292127 -0.9956937 1.434578
3642 0.2260767 -0.9712356 1.436686
3643 0.2260767 -0.9962356 1.436686
9999 0.0000000 0.0000000 2.250000
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
内側も含めたソリッドとしてメッシュを作成する方法がわからなかったのと、可能な限り計算点数を減らしたかったためSHELLの部分はSTLをエクスポートしたデータをそのまま使いました。(このため外殻部分だけのスカスカなくりまんじゅうになってます)
STLは原則3角形要素でできているためn3=n4になっており、eid, n1, n2, n3を/SH3N~以降の行に整形して転記しました。
たぶん本来は何らかのメッシュ生成処理を挟むはずなのでしょうが・・・・
LS-PrePostや他のメッシャーの使い方がよくわからずハマりそうだったので無理やり突破しました。絶対に良いやり方ではないと思います\(^o^)/
(上記の続き)
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/SH3N/2000001
1 1 2 3
2 1 3 4
3 1 4 5
...
6041 3640 3630 3632
6042 3640 3642 3630
6043 3640 3632 3638
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/END
これでkurimanju_tensile_tutorial.incファイルは完成です。
starterファイルと同じディレクトリに置いておきます。
なおエクスポートしたファイル末尾のSET_NODE_LISTの部分はStarterファイルのGRNODに張り付けるために後程使います。
Starterファイルの作成
ほぼ参考資料そのままです(震え声)
単位指定とメッシュ情報のインクルード
#RADIOSS STARTERから始めるのがお作法のようです。
あれ?#から始まる行はコメントじゃないの?って思ってリファレンスマニュアルを見たところ下記の3つだけは例外との記載がありました。
#RADIOSS STARTER: starterファイルの1行目に必須
#include (ファイル名): 同ディレクトリ内にあるファイルをインクルード
#enddata: インクルードファイル中の#enddata以降の行を無視
#RADIOSS STARTER
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/BEGIN
#Runname
kurimanju_tensile_tutorial
# Invers Irun
2022 0
# Input_mass_unit Input_length_unit Input_time_unit
kg mm ms
# Work_mass_unit Work_length_unit Work_time_unit
kg mm ms
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#include kurimanju_tensile_tutorial.inc
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
PART, MAT, PROPの設定
kurimanju_tensile_tutorial.incファイル内で全ての要素を/SH3N/2000001に含めて全体を一つの部品として定義しています。
/PART/2000001にMATID=1とPROPID=1を設定することでこのPARTID=2000001に対して/MAT/PLAS_JOHNS/1と/PROP/SHELL/1の設定内容が紐づくようです。
/PART/2000001
#part_title
Kurimanju
# prop_ID mat_ID Thick
1 1
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/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
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/PROP/SHELL/1
shell_0.01
# Ishell Ismstr Ish3n Idrill P_Thick_Fail
24
# Hm Hf Hr Dm Dn
# N Istrain Thick Ashear Ithick Iplas
0.01 1 1
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
剛体部分の設定
RBODY/1(grnd_ID=1, 代表NODE=9999, 代表NODEのgrnd_ID=2)をくりまんじゅうの頭頂部分の引っ張る部分として設定したいので
LS-PrePostからエクスポートしたファイルの末尾のSET_NODE_LISTの部分を整形して貼り付けます。
くりまんじゅうの足の部分は全NODE完全拘束です。
この辺のNODEのグループ分けのIDがこんがらがってきてちょっと混乱しました。(´・ω・`)
その他は引っ張り方向をZ方向に変えたくらいでほぼ参考資料通りです。
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/RBODY/1
#rbody_title
kurihead
# node_ID sens_ID Skew_ID Ispher Mass grnd_ID Ikrem ICoG surf_ID
9999 0 1
# J_XX J_YY J_ZZ
# J_XY J_YZ J_XZ
# Ioptoff Iexpams
/GRNOD/NODE/1
#title
kurihead_grnod
# item_ID1 item_ID2 item_ID3 item_ID4 item_ID5 item_ID6 item_ID7 item_ID8 item_ID9 item_ID10
208 209 215 253 257 276 277 281 279 290
285 287 288 289 291 283 286 273 252 247
275 278
#---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
9999
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/GRNOD/NODE/3
#title
kurifoot_grnod
# item_ID1 item_ID2 item_ID3 item_ID4 item_ID5 item_ID6 item_ID7 item_ID8 item_ID9 item_ID10
1362 1363 1364 1412 1418 1421 1422 1423 2466 1525
1424 1449 1471 1488 1638 1641 1644 1647 1578 2468
1650 1654 1655 1683 1684 1698 1699 2421 1613 1614
2422 2423 2424 1393 1390 1394 1404 2425 2473 2474
1409 2426 2427 2428 2429 2430 2431 1713 2481 2482
1719 2432 1726 1734 2433 2434 2435 2436 2489 2490
2437 2438 2439 2440 2441 2442 2443 2444 1383 1385
2445 2420 2446 2447 2448 2449 2450 2451 1386 1389
2452 2453 2454 2455 2456 2457 2458 2459 1756 1384
2460 2461 2462 2463 2464 2465 1745 1746 1754 1755
2467 1548 1549 1561 1571 1577 2485 2486 2487 2488
1586 1587 1590 1593 1599 1608 2477 2478 2479 2480
2469 1615 1637 2470 2471 2472 2483 2484 2475 2476
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/BCS/1
move_z
# Tra rot skew_ID grnod_ID
110 111 0 2
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/BCS/2
const
# Tra rot skew_ID grnod_ID
111 111 0 3
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/IMPVEL/3
imposed_velocity
#funct_IDT Dir skew_ID sensor_ID grnod_ID frame_ID Icoor
1 Z 0 0 2 0
# Scale_x Scale_y Tstart Tstop
0.0
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/FUNCT/1
#title
curve1
# X Y
0.0 0.50
1.0 0.50
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
##--------------------------------------------------------------------------------------------------
## End Of Radioss Block Deck
##--------------------------------------------------------------------------------------------------
/END
なお、TH関係の設定はマニュアル調べてる時間がなかったので今回は行いませんでした。lili orz llil
Engineファイルの作成
同じくほぼ参考資料そのままです。
時間は0~0.5msで0.02ms刻みとしました。
/RUN/kurimanju_tensile_tutorial/1/
0.50000000000000
/VERS/2022
/DT/NODA/CST/0
0.900000000000000 0.000000000000000 0.000000000000000
/TFILE/0
0.010000000000000
/ANIM/DT
0.000000000000000 0.020000000000000
/PRINT/-100/55
/ANIM/ELEM/EPSP
/ANIM/ELEM/VONM
/ANIM/ELEM/ENER
/ANIM/ELEM/HOURG
/ANIM/VECT/VEL
/ANIM/VECT/DISP
/ANIM/VECT/FOPT
/ANIM/VECT/CONT
/ANIM/NODA/DMAS
/END/ENGINE
PythonGUIアプリからの計算実行
Confluenceで公開されているアプリを使用させていただきました。
便利なアプリを作成していただいて本当に感謝です。
計算は6コア並列実行で約30分間かかりました。
なお、Anim-vtkにチェックを入れていると途中でStopボタンを押して止めた際もちゃんとvtkファイルに変換してから途中終了してくれました。初期時刻での動きの確認に便利でした。
結果
変換されたvtkファイルをParaviewで開いた結果です。(色はミーゼス応力)
とりあえずちゃんと両足が固定された状態で頭頂部の指定NODE群を引っ張る様子が見れました。体全体に応力がかかっている様子も確認できます。
目とか口が浮いててずれちゃったけど気にしない\(^o^)/。
やっぱり動画でシミュレーション結果がみえるとたのしいです^p^
とはいえ今回は力技で無理やり動かした感が強いのでもうちょっとちゃんと勉強したいところ。。。