見出し画像

OpenRadiossでくりまんじゅうのブロー成形にチャレンジしてみた

OpenRadiossのお勉強として公式の例題を参考にくりまんじゅう(ちいかわ©nagano)のブロー成形にトライしてみました。

#openradioss #ちいかわ #python #ブロー成形 #勉強記録


概要

OpenRadiossで遊んだ内容をまとめたチラシの裏です。
この前のお盆休みからOpenRadiossを触り始めたのですが(下記記事参照)これが意外と面白くてハマってしまいました^p^;

なんか面白そうなのないかなー・・・と公式の例題集を眺めているとブロー成形でボトルを作る例題があり、
コレダ!と思い、またしても以前FreeCADの練習で作ったくりまんじゅうを使って遊んでみました。

うまく表示されない場合は上記のAltair Community DocumentationでProduct=Radioss, Version=2024, GuideType=Tutrialにチェックを入れ、
Radioss 2024 DemoModelsを選択しダウンロードしてください。

radioss/exampleの中にあるRD-E-4400_Blow_molding_AMS.zipが今回参考にした例題です。

本記事では目次の通り、モデリングから計算および可視化までを一通りやってみた中での気づきや調べた内容のメモをまとめたものになります。

参考までに動作環境は下記の通りです。

  • Win11 + WSL2(Ubuntu 22.04 LTS)

  • LS-PrePost(R) 2024/R2(4.11.8) - 25Jul2024

  • FreeCAD 0.21.2

  • Paraview 5.12.1

※注意※
私はCAEもブロー成形もど素人なため、計算物理学や成形条件等についての知識ほぼゼロです lili orz lili
V&V(検証と妥当性確認)や精度は二の次でとりあえず動いたよー的な記事になります。ご容赦ください。。。

FreeCADでのモデル作成

今回もFreeCAD練習で作ったくりまんじゅうを使います。
(これを公開するのはさすがにまずそう?なのでご自分で試される際は球と円柱など単純な形状に置き換えて作成下さい)

例題と同様に、金型はZ軸方向の上下にそれぞれ配置し、パリソンと呼ばれる円筒形の樹脂は飲み口側と底側に大きなバリが残るのを想定したサイズとします。
これらはすべて2次元シェル要素としてメッシュ化されるものとします。

FreeCADで作成済のくりまんじゅうモデルファイルを開きます。
まずZ方向に直立しているくりまんじゅうをY軸方向に寝かせます。

このファイルのくりまんじゅうの身長は90mmなので例題集の寸法と大まかにそろえるために拡大します。

FreeCADのDraftワークベンチの「尺度」からサイズを変更したクローンを作成します。膨らむ方向の寸法をx,z方向でできるだけ揃えたかったので倍率を調整しました。このためちょっと縦長なくりまんじゅうになりました。。。

くりまんじゅうの身長方向は2倍、横と奥行き方向は1.5倍に拡大してクローン作成

飲み口部分の円柱を作り頭頂部にめり込むように配置して拡大されたクローンと結合しておきます。  

さらに直方体を二つ下図のようにくりまんじゅうの体の中心面(この場合はZ=0面)を対象に2つ合わさるように作成しそれぞれで差集合をとります。

くりまんじゅうの顔がある部分が下型
差集合を取ったあとの上型のパリソン接触面

出来上がったソリッドをダウングレードして面にして不要な面を削除します。
さらに位置を調整すればモデルは完成です。
最後に、上型、下型、パリソンをそれぞれigesファイルとして出力しておきます。

パリソンの直径は50mmとしました

またここで、上型と下型の重心座標を調べてメモしておきます。
FreeCADのFCInfoマクロのCentre of Gravity X, Y, Zが重心座標です。
(インストールしていない方はツール -> Addon ManagerからFCInfoで検索しインストールしてください)

終わってから気づきましたがしっぽの部分が邪魔で型から抜けないですよねこれ。(結果しっぽの部分はうまく成形できなかったのでヨシッ^p^;)

メッシュ作成

今回もLS-PrePostを使用してメッシュを作成しました。
LS-PrePostを起動して先ほどFreeCADから出力したigesファイル3つをそれぞれインポートしたらMesh -> AutoMesherで2次元メッシュを作成します。

メッシュ化する部品(上型・下方・パリソン)の1つをAreaでドラッグして選択しMeshTypeをMixed, ElemSizeを0.6[mm]にしてMesh -> Accept -> Doneと順にクリックするとメッシュが形成されます。これを部品3つについて繰り返し行います。

くりまんじゅうがハーッ・・・ってしてる時の顔の部分が結構細かくて、メッシュサイズを小さくせざるを得ませんでした。

ハーッ・・・

ちゃんと顔の部分もしっかりメッシュが切れているようです。
特に歪なメッシュも見つからなかったのでこのまま次の節点グループの取得に進みます。

節点グループの取得

例題にならい、パリソンの拘束点を設定するためにEntityCreationのSET_NODEから節点グループを設定します。

例題の拘束点を調べるためにradioss例題の節点・シェル情報をどうやってLS-PrePostに読ませればいいんだ・・・?
で詰まって途方に暮れていましたが、

もうこれ自分で変換したほうが早いんじゃね?

と思い、変換プログラムをPythonでサクッと作成して変換しました。
(/PART, /NODE, /SH3N, /SHELL, /GRNOD/NODEをそれぞれ変換するだけ)
先回作ったものをベースにちょこっと変えるだけで2時間くらいでできた\(^o^)/

こんなことしなくてももっと楽な方法があると思います。
需要は無いと思うので公開はしませんが、この辺のプログラムはちゃんとまとめて整理しておきたいところ・・・

調べた結果、下図のようにパリソン端の円周エッジ部分(エッジ中の1点とそれ以外の点で別グループ)と
円柱の母線部分が節点グループとして設定されていたのでそれにならい節点グループを設定しておきます。

パリソン拘束を設定する節点グループ

後程、成形中のパリソンがむやみに動かないよう拘束するためにこの情報を用います。  

最後に.kファイルを出力してメッシュ化と節点グループの設定は終わりです。  

Radioss形式への変換

先回作ったプログラムで変換。
LS-DYNAのキーワードがそのまま使えるっぽいので現状は*SET_NODE_LIST以外はおそらく変換不要のはず?

今回はとりあえずすべてradioss形式に変換しました。
LS-DYNAキーワードの自動変換を一度試したことがあるのですがマッピングに失敗? or 自分の入力ミス?で
starter実行時にエラーや警告が出てしまったことがあり、それ以来可能な限りradioss形式で入力するようにしています。
この辺は私も知識不足なので詳しい方教えてくださいm(__)m

スターターファイルの作成

ようやくstarterファイルの作成にとりかかります。
冒頭で紹介した公式例題集のstarterをベースにしています。

Control Cards

解析全体の設定など。
starter実行時に警告がでたのでバージョンは140 -> 2022に変えて一部の不要なパラメータは削除しておきました。

#RADIOSS STARTER
# 参考: 公式例題集 - 44_blow_molding_amss
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/BEGIN
kurimanju_blow_molding                                                                     
      2022         0
                  Mg                  mm                   s
                  Mg                  mm                   s
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#-  1. CONTROL CARDS:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/TITLE
kurimanju_blow_molding
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/ANALY
# N2D3D: 解析タイプを0=3次元, 1=軸対象, 2=平面ひずみに設定
# IPARITH: 並列オプション0=1=並列ON, 2=並列OFF
# ISUB: シェル要素のサブサイクリングフラグ0=無し, 2=有り
#    N2D3D             IPARITH      ISUB
         0                   0         0
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/DEF_SOLID
# 全てのソリッドのPROPと厚肉シェル(本事例は厚肉シェルのみ使用)のデフォルト値を設定
# I_SOLID ソリッド要素定式化フラグ: 0->1 直行変形モードと剛体変形モードの補正を伴う粘性アワグラス定式化(Belytschko)
# ISMSTR 微小ひずみ定式化フラグ: 0->4 完全幾何非線形性(/DT/BRICK/CSTによる影響はありません)
# IFRAME 要素座標系定式化フラグ: 0->1 非共回転定式化
#  I_SOLID    ISMSTR                                                      IFRAME
         0         0                                                           0
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/IOFLAG
# 入出力設定
# 低減出力・STYファイル出力なし・回転自由度の計算を常に行わない
#     IPRI                         IOUTP    IOUTYY   IROOTYY     IDROT
         0                             0         0         0         0
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/SPMD
# https://2021.help.altair.com/2021/hwsolvers/ja_jp/rad/topics/solvers/rad/faq_rad_parallelism_r.htm
#   DOMDEC     Nproc              Dkword             Nthread
         0         8                   0                   1  

DAMPING

全節点に対して減衰係数を設定。
この辺の知識がないのでレイリー減衰について少し調べてみましたが、まだしっかり噛み砕いて理解できてませんorz

川重テクノロジー株式会社 技術レポート レーリー減衰について

  • α 質量に比例する減衰で低周波のゆっくりとした動きに対して大きくなる減衰に掛かる係数

  • β 剛性に比例する減衰で高周波の早い動きに対して大きくなる減衰に掛かる係数

αとβの値は例題の値をそのまま用いました。
β=0なのでα減衰のみを考慮しているようです。

#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#-  2. DAMPING:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/DAMP/1
# 減衰係数の設定(レイリー減衰)
GLOBAL                                                                                              
#              alpha                beta  grnod_ID   skew_ID              Tstart               Tstop
                 .05                   0    100000         0                   0                   0
/GRNOD/GENE/100000
# 1 ~ 412617のNODEをgrnod_ID=100000として登録
# ⇔全節点に上記の減衰設定を適用させる
ALL
         1    412617

MATERIALS

金型とパリソンの材料物性の設定。
パリソンの設定がちょっとだけ複雑です。
ひずみ速度による応力-ひずみ線図の変化を考慮しているようです。

FUNCTONの部分に記述されているものをまとめてプロットすると下記のようになっています。
ひずみ速度が大きくなればなるほど、応力(強度)が増しています。

ひずみ速度εc[1/s]ごとの応力-ひずみ線図

NODES

node.incに重心情報を付け足したファイルをインクルード。

#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#-  4. NODES:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#include node_add_center_of_gravity.inc

インクルードファイルの中身です。
末尾に412616, 412617NODEを重心座標として追記してあります。

/NODE
         1              -100.0              -200.0                27.0
         2              -100.0                20.0                27.0
         3              -100.0           -199.4005                27.0
         4              -100.0           -198.8011                27.0
         5              -100.0           -198.2016                27.0

...(省略)

    412613               -25.0              -100.0           0.0134848
    412614               -25.0           -100.5988            0.013443
    412615               -25.0           -101.1976           0.0132821
    412616             -0.0182            -92.7192             41.8850
    412617             -0.0411            -93.0385            -42.2945

BOUNDARY CONDITIONS

成形時の各種拘束条件の設定。
setnode.incから必要に応じコピペして作成しました。

金型はZ方向以外に動かないように固定します。

パリソンの両端をY方向に、母線をZ方向に動かないように拘束してあります。おそらくパリソンが型の中に吸い込まれないようにするためかと思います。

この辺の条件の詳細な意味は実際のブロー成形に携わったことがないのでわかりませんがひとまず例題の設定にならっておきます。

#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#-  5. BOUNDARY CONDITIONS:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/BCS/1
Tooling_12_const
#  Tra rot   skew_ID  grnod_ID
   110 111         0    100012
/GRNOD/NODE/100012
BCS_group_100012_of_NODE
    412616    412617
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/BCS/11
PLASTIC_POINT
#  Tra rot   skew_ID  grnod_ID
   011 110         0        11
/GRNOD/NODE/11
PLASTIC_POINT
    324511
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/BCS/12
PLASTIC_ENDS
#  Tra rot   skew_ID  grnod_ID
   010 000         0        12
/GRNOD/NODE/12
PLASTIC_ENDS
    325702    325701    325700    325699    325698    325697    325696    325695    325694    325693
    325692    325691    325690    325689    325688    325687    325686    325685    325684    325683
    ...(省略)
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/BCS/13
PLASTIC_LINE
#  Tra rot   skew_ID  grnod_ID
   001 110         0        13
/GRNOD/NODE/13
PLASTIC_LINE
    324513    325440    324515    324516    325437    325436    324519    324520    324521    325432
    325431    324524    325429    325428    325427    324528    325425    325424    325423    325422
    ...(省略) 

PARTS, GEOMETRICAL SETS

要素(シェル)情報およびPART情報の設定。
パリソンの厚みは2.0[mm]に設定します。あとは例題通りです。

例題ではパリソンのシェルごとに厚み情報が設定されていましたが今回は行いませんでした。

LS-PrePostのSET_ELEMENTで厚みを変えたい部分を選択して.kファイルに出力、それを変換してシェル情報と結合させれば簡単に部位ごとの厚みを変えることはできそうです。(めんどくさかったからやらなかった\(^o^)/)

#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#-  6. PARTS:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#include shell.inc
/PART/1
TOOL1
         1         1         0
/PART/2
TOOL2
         2         2         0
/PART/3
PLASTIC
         3         3         0
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#-  7. GEOMETRICAL SETS:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/PROP/SHELL/1
Tool1
#   Ishell    Ismstr     Ish3n    Idrill
         1         0         1         0
#                 hm                  hf                  hr                  dm                  dn
                   0                   0                   0                   0                   0
#        N   Istrain               Thick              Ashear              Ithick     Iplas
         1         0                   1                   0                   0         0
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/PROP/SHELL/2
Tool2
#   Ishell    Ismstr     Ish3n    Idrill
         1         0         1         0
#                 hm                  hf                  hr                  dm                  dn
                   0                   0                   0                   0                   0
#        N   Istrain               Thick              Ashear              Ithick     Iplas
         1         0                   1                   0                   0         0
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/PROP/SHELL/3
Plastic
#   Ishell    Ismstr     Ish3n    Idrill
        24         0         0         0
#                 hm                  hf                  hr                  dm                  dn
                   0                   0                   0                   0                   0
# Nはシェル厚み内の積分点の数で1~9を設定可能
# Ithick=1は厚みの変化を考慮するフラグ
#        N   Istrain               Thick              Ashear              Ithick     Iplas
         5         0                 2.0                   0                   1         1

FUNCTIONS, PRESSURE LOADS

型の移動と圧力印加の設定。
(すでに上で説明したひずみ速度ごとの応力-ひずみ線図を示した関数は除く)

#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#-  8. FUNCTIONS:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/FUNCT/101
Tool Move
#                  X                   Y
                   0                   0                                                            
                0.40                   1                                                            
                0.60                   1                                                            
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/FUNCT/111
Pressure on Plastic
#                  X                   Y
                   0                   0                                         
                0.40                .020
                0.60                .080                                                                                                   
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#-  9. PRESSURE LOADS:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/PLOAD/5
Pressure
# surfIDへの圧力設定
# 圧力の向きはSURF/SEGの n1n3 × n2n4 の方向であることに注意
# Ascale_x: 時間のスケール
# Fscale_y: 圧力のスケール
# 圧力(t) = Fscale_y * func * (t / Ascale_x)
#  surf_ID  functIDT sensor_ID                                          Ascale_x            Fscale_y
    100013       111         0                                                 1                -1.0
# /SURF/SEG/100013
#include surf_seg_parison_reindex.inc


圧力の向きは n1n3 X n2n4 の向きであることに要注意です。
今回はなぜか内向きだったので圧力の向きにマイナスをかけて外向きにしました。(面の向きの設定方法がわからなかった・・・)

/SURF/SEGは例題では要素IDが1からの連番で再定義されていたのでそれにならいました。

/SURF/SEG/100013
Plastic
         1    324511    324513    325703    325702
         2    324513    325440    325704    325703
         3    325440    324515    325705    325704
         ...(省略)

金型の合わせ面のZ座標(シェル厚み考慮なしの中心値)とパリソンに印加する圧力の推移は下記のとおりです。
金型の動きは例題にならい、最も閉じた時点でやや隙間ができるようにしました。 また、圧力は計算時間短縮のため例題よりも短い時間で膨らむように調整しました。(結果、調整にちょっと失敗した\(^o^)/)


圧力のプロファイル
金型合わせ面のZ座標のプロファイル

INTERFACE

接触設定(/INTER/TYPE7)。
OpenRadioss初心者の私にはここが一番の鬼門でした。
今回のこのメモを通して少しは理解度が深まった気がします(´・ω・`)

先に設定内容だけを記しておきます。

#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#- 10. INTERFACES:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
# 金型(Mast_id:メインサーフェスid)->パリソン(Slav_id:セカンダリ節点grnod)の接触設定
# パリソン->金型の接触設定
# Istf=4: インターフェース剛性はメイン及びセカンダリ剛性の最小値です
# Igap=2: 計算するギャップの可変ギャップ+ギャップスケール補正
# Gapmin=0.01[mm]: 最小ギャップ
# Inacti=5: ギャップは時間とともに変化し初期ギャップは次のように調整されます
#           gap0 = Gap - 初期貫通P0
/INTER/TYPE7/1
PLASTIC_INTER
#  Slav_id   Mast_id      Istf      Ithe      Igap                Ibag      Idel     Icurv      Iadm
    100006    100008         4         0         3                   0         0         0         0
#          Fscalegap             GAP_MAX             Fpenmax
                 .95                   0                   0
#              Stmin               Stmax          %mesh_size               dtmin  Irem_gap
                   0                   0                   0                   0         0
#              Stfac                Fric              Gapmin              Tstart               Tstop
                  .1                  .7                 .01                   0                   0
#      IBC                        Inacti                VisS                VisF              Bumult
       000                             5                   0                   0                   0
#    Ifric    Ifiltr               Xfreq     Iform   sens_ID
         0         0                   0         2         0
/GRNOD/PART/100006
INTER_group_100006_of_PART
         3
/SURF/PART/100008
INTER_group_100008_of_PART
         1         2
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
# パリソン->金型の接触設定
/INTER/TYPE7/2
PLASTIC_INTER_sym
#  Slav_id   Mast_id      Istf      Ithe      Igap                Ibag      Idel     Icurv      Iadm
    100009    100011         4         0         3                   0         0         0         0
#          Fscalegap             GAP_MAX             Fpenmax
                 .95                   0                   0
#              Stmin               Stmax          %mesh_size               dtmin  Irem_gap
                   0                   0                   0                   0         0
#              Stfac                Fric              Gapmin              Tstart               Tstop
                  .1                  .7                 .01                   0                   0
#      IBC                        Inacti                VisS                VisF              Bumult
       000                             5                   0                   0                   0
#    Ifric    Ifiltr               Xfreq     Iform   sens_ID
         0         0                   0         2         0
/GRNOD/PART/100009
INTER_group_100009_of_PART
         1         2
/SURF/PART/100011
INTER_group_100011_of_PART
         3
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
# パリソンの自己接触設定
# Igap=0なのでギャップはGapmin[mm]で固定
/INTER/TYPE7/3
PLASTIC_self
#  Slav_id   Mast_id      Istf      Ithe      Igap                Ibag      Idel     Icurv      Iadm
    100006    100011         4         0         0                   0         0         0         0
#          Fscalegap             GAP_MAX             Fpenmax
                   0                   0                   0
#              Stmin               Stmax          %mesh_size               dtmin  Irem_gap
                   0                   0                   0                   0         0
#              Stfac                Fric              Gapmin              Tstart               Tstop
                  10                  .7                0.25                   0                   0
#      IBC                        Inacti                VisS                VisF              Bumult
       000                             1                   0                   0                   0
#    Ifric    Ifiltr               Xfreq     Iform   sens_ID
         0         0                   0         2         0

ギャップ

接触の取り扱いには2種類あり、今回用いたTYPE7はペナルティ法と呼ばれるRadiossでは一般的な方法とのことです。

詳細は下記リンクのRadiossのドキュメントが非常にわかりやすいです。

Altair Radioss 2022 ユーザガイド 接触の取り扱い

各面にはギャップと呼ばれる接触判定領域があり、
その領域内にセカンダリ節点グループの節点が入ると面と節点が接触したと判定されます。

今回のシミュレーションでは金型とパリソンが両方動くので、金型面⇒パリソン節点の接触とパリソン面⇒金型節点の接触の2種類の設定が必要なようです。加えて、パリソン同士が自己接触するのでその設定も必要となり計3つの接触設定が起きています。

TYPE7のギャップ領域は下記図のような領域になっています。(下記リンクより引用)

Altair Radioss 2022 ユーザガイド 汎用インターフェース(/INTER/TYPE7)

Inacti, Igapの値を選ぶことで、時間ごとに可変ギャップを得ることも可能です。ここを理解するためには初期貫通について知っておく必要があります。

初期貫通

初期貫通と可変ギャップの関係については、
ユーザガイドの初期貫通のページの説明が丁寧でわかりやすかったので下記にリンクを記しておきます。

Altair Radioss 2022 ユーザガイド 初期貫通

例題では金型⇔パリソンはIgap=2で初期貫通を引いた値を初期ギャップにする設定でした。
それにならいIgap=2で計算開始しようとしたところIgap=3にしろと警告が出たので素直に3にしました\(^o^)/
Igap=3の時は2の場合に加えてさらにメッシュのサイズも考慮してギャップを計算してくれるようで、より柔軟に可変ギャップを得ることができるようです。

パリソンの自己接触はIgap=0でGapMin固定です。例題にならい少し大きめの値にしておきました。

RIGID, IMMDISP, TH

剛体設定と型の移動設定など。
金型の移動についてはすでに説明済のため、ここで特記することはないです。

#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#- 11. RIGID BODIES:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/RBODY/1
TOOL1
#     RBID     ISENS     NSKEW    ISPHER                MASS   Gnod_id     IKREM      ICOG   Surf_id
    412616         0         0         0                   0    100002         0         0         0
#                Jxx                 Jyy                 Jzz
                   0                   0                   0
#                Jxy                 Jyz                 Jxz
                   0                   0                   0
#Ioptoff
         0
/GRNOD/PART/100002
RBODY_group_100002_of_PART
         1
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/RBODY/2
TOOL2
#     RBID     ISENS     NSKEW    ISPHER                MASS   Gnod_id     IKREM      ICOG   Surf_id
    412617         0         0         0                   0    100003         0         0         0
#                Jxx                 Jyy                 Jzz
                   0                   0                   0
#                Jxy                 Jyz                 Jxz
                   0                   0                   0
#Ioptoff
         0
/GRNOD/PART/100003
RBODY_group_100003_of_PART
         2
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#- 12. IMPOSED DISPLACEMENTS:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/IMPDISP/1
TOOL1_MOV
#   Ifunct       DIR     Iskew   Isensor   Gnod_id     Frame     Icoor
       101         Z         0         0    100004         0         0
#            Scale_x             Scale_y              Tstart               Tstop
                   0               -25.0                   0                   0
/GRNOD/NODE/100004
IMPDISP_group_100005_of_NODE
    412616
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/IMPDISP/2
TOOL2_MOV
#   Ifunct       DIR     Iskew   Isensor   Gnod_id     Frame     Icoor
       101         Z         0         0    100005         0         0
#            Scale_x             Scale_y              Tstart               Tstop
                   0                25.0                   0                   0
/GRNOD/NODE/100005
IMPDISP_group_100004_of_NODE
    412617
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#- 13. TIME HISTORIES:
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
/TH/INTER/1
TH INTER
#     var1      var2      var3      var4      var5      var6      var7      var8      var9     var10
DEF       
#     Obj1      Obj2      Obj3      Obj4      Obj5      Obj6      Obj7      Obj8      Obj9     Obj10
         1         2
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|
#/AMS
#
/END
#---1----|----2----|----3----|----4----|----5----|----6----|----7----|----8----|----9----|---10----|

エラーチェック

こちらで公開されているPythonのGUIアプリを使わせていただきました。
OpenRadioss Confluence - python/tk guis for job submission, anim-vtk conversion and T01-csv conversion

Run Starter Onlyにチェックを入れて実行するとStarterファイルの出力(~_0000.out)のみを得ることができます。

ファイル中には種々の情報に加え、エラーと警告のメッセージが表示されます。確認したところエラーも警告もありませんでした。

無事エラーも警告もなし

これでスターターファイルの作成は終わりです。

エンジンファイルの作成

engineファイルを作成します。
ほぼ例題と同じですがAMSはよくわからなかったので今回は使用していません。
試しに使ってみましたが、計算途中でエラーが発生したり結果がおかしかったりで使いこなせませんでした。

0.0[s]~0.6[s]まで0.01[s]刻みで、
ミーゼス応力やシェル厚みを含んだアニメーションファイルを出力させます。

/TITLE 
kurimanju_blow_molding
/VERS/140

/DT/INTER/DEL
6.700000e-001 1.000000e-007
/DT/NODA/CST
6.700000e-001 7.700000e-007

/ANIM/DT 
0.000000e+000 1.000000e-002
/TFILE
1.000000e-003
/ABF
1.000000e-003 1e30
/RFILE
10000 0 0
/PRINT/-100/55
/RUN/kurimanju_blow_molding/1
0.6000000e-000
/ANIM/ELEM/EPSP
/ANIM/ELEM/VONM
/ANIM/VECT/VEL
/ANIM/SHELL/THIC
/MON/ON

おそらくもっとも重要なのは、/DT/NODA/CSTの設定だと思います。
公式ユーザガイドおよびstarterファイルの出力の最後のほうに下記のような図と表があるのでこれを参考に設定しておけばよいようです。

Altair Radioss ユーザガイド 節点時間ステップコントロール

今回のTarget time step

スケールファクターは0.67、初期DM/Mは0.03が推奨値とのことです。
今回のstarterファイル出力ではそれに対応する値は7.70e-7[s]でした。

/DT/NODA/DELは時間ステップが設定値以下になるような節点を除去する設定です。
DT/NODA/CSTの設定値の1/100位を目安にするのが良いとユーザガイドに書いてありましたが気づかずに1.0e-7にして計算実行してしまいました。
(・・・計算した結果、除去節点は発生しておらず結果オーライでした。次から気を付けます^p^;)

計算実行

ようやく計算開始!
上記エラーチェックの項で使用したGUIアプリを使用させていただきました。VTKファイルへの変換をONにするチェックを入れておくと後々楽です。
8コア並列で約5時間かかりました・・・

事前に時間ステップを大きな値にして動作の確認を可能な限り行いましたが、当然その場合は計算がエラー停止することが多く、条件のあたり付けに苦労しました。。。

結果

計算結果のチェックをして、paraviewで可視化します。

計算結果のチェック

Altair Radioss ユーザガイド 計算チェック
を参考に、結果のチェックを行います。

エネルギー誤差の推移
時間ステップの推移

ENERGY_ERRORの値はマイナスかつ変化量が15%より小さい必要があるとのことで、今回の結果は問題なさそうです。

TIME_STEPに関しても極端に小さくなっている箇所はなく、これも同じく問題なさそうです。

また、MASS.ERR, MASS_ADDEDは全ステップを通して0でした。
計算結果には特に大きな問題はなさそうで、正しく計算されたのではないかと思います。

CYCLE,TIME,TIME-STEP,ELEMENT,ID,ERROR,I-ENERGY,K-ENERGY_T,K-ENERGY_R,EXT-WORK,MAS.ERR,TOTALMASS,MASSADDED
100,0.4793E-03,0.4793E-05,NODE,412063,-0.0%,0.4519E-04,1.755,0.2651E-16,1.755,0.000,0.9614E-03,0.000
200,0.9585E-03,0.4793E-05,NODE,412063,-0.0%,0.1627E-02,1.756,0.2215E-14,1.758,0.000,0.9614E-03,0.000
300,0.1438E-02,0.4793E-05,NODE,412063,-0.0%,0.7101E-02,1.756,0.2910E-13,1.763,0.000,0.9614E-03,0.000

...

188900,0.5994,0.2575E-05,NODE,357613,-1.4%,0.1670E+05,0.1678E-01,0.8538,0.1693E+05,0.000,0.9614E-03,0.000
189000,0.5996,0.2573E-05,NODE,357613,-1.4%,0.1670E+05,0.1539E-01,0.8696,0.1693E+05,0.000,0.9614E-03,0.000
189100,0.5999,0.2574E-05,NODE,357613,-1.4%,0.1670E+05,0.1642E-01,0.8862,0.1693E+05,0.000,0.9614E-03,0.000

また、内部エネルギーの推移は下記の通りでした。(例題集で同様にプロットしてたので載せてみました)

paraviewでの可視化

金型を横から見たときと下から見上げた時の動画です。
金型のみ50%透過、色はシェルの厚みです。

ちょっと型を閉じる前に印加する圧力が高かったようで、型が閉じきる前(0.38[s]付近)にブワっと膨らんでしまっています。もうちょっとこの辺は調整が必要かも?

型が閉じてからは強めの圧力が印加され、くりまんじゅうの顔部分に沿ってパリソンがじんわり変形しているのが確認できます。

とりあえず例題の結果からは大きく外れることなくシミュレーションを行えたようで良かったです。

下記はt=0.60[s]での成形後のくりまんじゅうです。

ちゃんとハーッ・・・してる顔が見える!
うっすらしっぽが見える

一番気にしていた顔の部分はなんとかくりまんじゅうがハーッしてることが認識できるレベルで成形できました!

でも耳・手・しっぽは膨らみが足りませんでした・・・
(しっぽに関しては前述した通りこの形状のままだと型から抜けなくなっちゃうので要修正)

この辺りはもう少し条件を振ったらどうなるのか?試してみたかったのですが今回メッシュを無駄に細かく切ってしまったために計算時間が延びてしまい色々試すことができませんでした。
上手にメッシュ作成できるようになりたいです。

感想

ほぼ例題集の内容をなぞっただけですが、自分でモデル・メッシュの作成からトライしてみると色々な気づきがありました。
特に接触設定は少しずつ解るようになってきました。

ブロー成形についても興味がわきました。
実際は今回考慮しなかった温度によっても大きく出来栄えが変わるみたいです。また、3次元ブロー成形のような複雑な形状をブロー成形する手法もあるようで面白そうです。

とにかく楽しかったです。
今後もなにか面白そうな題材を見つけて遊んでいきたいです。

参考資料


いいなと思ったら応援しよう!

この記事が参加している募集