見出し画像

OpenRadiossに入門してくりまんじゅうを引っ張ってみた

「なつやすみのじゆうけんきゅう」として最近流行り(?)のOpenRadiossを少しだけ触ってみました。

#openradioss #ちいかわ #オープンCAE


概要

お盆休みにOpenRadiossに入門してみたのでその備忘メモです。

私は構造・衝突系CAE関連の知識が全くないど素人のためまずは先駆者の方々が公開されている事例の写経から始めようと思い、下記リンクの内容を写経しつつ引っ張り対象をくりまんじゅう(※)に変えただけのごく簡単な事例から始めてみました。

※ちいかわ(©nagano)のキャラクター。お酒が大好き。

具体的にはくりまんじゅうの足を完全拘束して頭頂部を+Z方向に引っ張ったときのシミュレーションにトライします。

FreeCAD練習として作成したくりまんじゅう(©nagano)

このくりまんじゅうのモデルは以前OpenFOAMを触り始めていた時にFreeCADの練習として作成したものです。
今回はモデルは作成済としてradioss形式への変換部分だけ行います。

下記は以前OpenFOAMの練習としてシミュレーションしたくりまんじゅう周りの流れです(今回の内容とは全く関係なし^p^)

くりまんじゅう周りの流れ

くりまんじゅうのFreeCADファイルをradioss形式に変換

ここがいきなり最大の難関でした。

LS-PrePostというアプリが必要とのことでwindows版をインストールしたところ、下記のような横線が入りまくる現象が発生。調べたところ一部のノートPCで発生する現象らしく、特に解決策が見つからなかったです。

不具合画像(LS-PrePost win 4.11.8)

色々試した結果良くならなかったのであきらめてVirtualBoxでUbuntuDesktop環境を作成してその中でLinux版のLS-PrePostを起動させるとなんとか動いてくれました。。。

無事LS-PrePostが立ち上がってくれたら、あらかじめFreeCADから出力しておいたくりまんじゅうのSTLファイルをインポートします。
File -> Import -> STL Fileで下図のようにインポートできました。

STLファイルをインポート

今回はくりまんじゅうの両足を固定し、頭頂部の一部を+Z方向に引っ張るのでそのためのNODEグループを取得しておきます。参考資料記載の方法にて問題なく取得できました。

+Z方向に引っ張る頭頂部の剛体部分
完全拘束点とする足の部分

続いてファイルをエクスポートします。
File -> Save As -> Save Keyword As...で名前を付けて保存できました。

保存するとLS-DYNA形式のファイルが起きる

エクスポート後の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^

とはいえ今回は力技で無理やり動かした感が強いのでもうちょっとちゃんと勉強したいところ。。。

参考資料


この記事が気に入ったらサポートをしてみませんか?