1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Salome-Meca 2020で部品の連結(SSLV)

Posted at

この資料はオープンCAE勉強会@岐阜で公開されているFS氏ご提供の「SALOME-Mecaの使用法解説:4.0 部品の連結」をSalome-Meca 2020を用いてモデル作成、メッシュ生成、解析条件設定、解析実行、結果処理を行いました。

はじめに

複数のSolidを連結(結合)してAssyを作り、Assyの線形解析をする問題を考えます。
複数の部品を配置した後、連結する箇所を定義して連結し解析します。連結部で荷重や変位を相手側に伝え構造解析を行います。
この問題は、複雑な部品を組み合わせてAssyを作って解析するには、都合のよい方法ですが、連結部の誤差が発生します。連結部の誤差をなくすためには、複合材(連結部で節点を共有するモデル)のモデルを作り解析しますが、複雑な部品の場合、複合材のモデルを作るのは、難しくなります。

部品間の隙間がないモデルの場合

部品を組み合わせてAssyを作りますが、これら部品間の隙間が0の場合で解析します。モデルは、複合材モデルで解析した「multi-bar-1.stp」を使います。
解析は、~/CAE/Assy/というフォルダーを作り、この中で解析します。

2021-05-21-08-29-42.png

モデルの読み込み

モデルは、2ヶのSolidで構成される「multi-bar-1.stp」を読み込みます。
BaseとBarを配置しています。Baseの下面を固定して、Barの上面に荷重を掛けてひずませます。複合材で解析した方法と同じ方法で解析します。

Entityの作成

解析に使用するFaceやVolumeを定義します。
まず、読み込んだモデルを分離します。メニューバーの「New Entity」「Explode」でSub-shapes selection画面で、Main Objectに読み込んだモデルが設定されていることを確認し、Sub-shapes TypeをSolidに変更して分離します。

2021-05-21-08-36-37.png

上のVolumeを「Bar」、下のVolumeを「Base」に名前を変更します。
次に、BaseとBarをグループ化します。この後、Baseの下面を「fix」、上面(連結面)を「contBase」という名前でグループ化します。Barの下面(連結面)を「contBar」、上面を「press」でグループ化します。
この状態での、Object Browserツリーの構造は、下記。

2021-05-21-08-54-21.png

グループ名 備考
Base Solid1(Base)
fix 固定面
contBase Baseの連結面
Bar Solid2(Base)
contBar Barの連結面
press 荷重を負荷する面

メッシュの作成

SalomeをMesh画面に変えて、メニューバーの「Mesh」「Create Mesh」でメッシュを切ります。(Create Mesh画面内のGeometryが「multi-bar-1.stp_1」に設定されていることを確認します。)
メッシュは、複合材モデルと比較するために、複合材モデルとまったく同じ方法でメッシュを切ります。

  • 四面体で高次のメッシュ
  • Max Size=3

Object Browserの「Mesh_1」を右クリックし「Create Groups from Geometry」から、Geometryで設定したグループをメッシュに再設定します。
以下の画面が、今回の設定内容

2021-05-21-09-01-56.png

メッシュ部分を拡大すると、部品を連結させた場合、部品の境界面で節点を共有しておらず、完全に分離されたモデルになっている事が判ります。

2021-05-21-09-13-25.png
2021-05-21-09-14-50.png

Aster Codeの作成

Salome画面をMeshからAsterStudyに変えます。
code_asterのversion選択では、「stable」を選択します。
メニューバー上の「Operations」「Add Stage with Assitant」「Isotropic liner elasticity」をクリックして、通常の線形解析を実施し、Aster Codeを作成します。(fix面を固定し、press面に0.1MPaの圧力をかけます。Aster Codeの結果File名は、「~/CAE/Assy/multi-bar-1.rmed」としました。材料定数は、あとで編集するので適当な値を入力しておきます。)
でき上がったAster Codeを連結問題が解ける様に編集します。
「DATA Settins」画面、「CurrentCase」>「Stage_1」からコンセプト名「mecabc」のAFFE_CHAR_MECAをダブルクリックして編集します。
「LIAISON_MAIL」を選択し、境界条件に連結コマンドを追加します。
「0 items」横のアイコンをクリックして、行を追加します。
追加された行の「Edit」をクリックし、「GROUP_MA_MAIT」を選択し、「Edit」から連結する相手(Bar)を選択します。
同様に、「GROUP_MA_ESCL」を選択し、「Edit」からBarと連結する面(contBase)を選択します。
以上で連結の定義は、終了。ツリーの構造は、下記。

mecabc = AFFE_CHAR_MECA(DDL_IMPO=_F(DX=0.0,
                                    DY=0.0,
                                    DZ=0.0,
                                    GROUP_MA=('fix', )),
                        LIAISON_MAIL=_F(GROUP_MA_ESCL=('contBase', ), # 連結の定義、連結面
                                        GROUP_MA_MAIT=('Bar', )), # 連結する相手の部品
                        MODELE=model)

連結の定義は、「LIAISON_MAIL」コマンドで定義します。上記の例では、BarとcontBaseを連結させています。
ついでに材料定数も、複合材モデルで確認した定数と同じ定数に変更しておきます。ツリーの構造は、下記。

Aluminum = DEFI_MATERIAU(ELAS=_F(E=70600.0,
                                 NU=0.345))

steel = DEFI_MATERIAU(ELAS=_F(E=212000.0,
                              NU=0.293))

materfl = AFFE_MATERIAU(AFFE=(_F(GROUP_MA=('Base', ),
                                 MATER=(Aluminum, )),
                              _F(GROUP_MA=('Bar', ),
                                 MATER=(steel, ))),
                        MODELE=model)

「フロッピィ」のアイコンをクリックして保存します。

計算開始

通常通りに、計算開始させます。
途中、警告がでますが計算は正常にされている(エラーの発生はない)ようなので、ここでは、無視しておきます。
(警告の内容については、4項「連結の定義方法」参照。)
この方法は、もともとDoc:CAETutorials「9 Salome & Code-Aster JML's Tutorials (CAELinux beta 2)」で公開されている「JMLtutorials.zip」内の「caelinux4.pdf」と同じ方法をとっています。
tutorialの方法は、Salomeで1次メッシュを作り、Aster Codeで2次メッシュに変換して新たなメッシュを作り、このメッシュに再度グループ名を定義し、連結(接触)問題を解いているので、Aster Codeが複雑になっています。今回の方法は、Salomeで2次メッシュを作って、そのまま連結コマンドを追加するだけなので、編集は少なくて済みます。
実行に関して、連結させたモデルでは、複合材モデルに比べて、多少計算時間がかかります。

結果の確認

今回の結果を、複合材のモデルと比較します。
複合材モデルと少し違った結果になる。やはり連結させたモデルは、連結部に少し誤差が出てしまう。連結モデルは、contBase面全体でBarと連結させた為、contBase面全体がひずんでいる。→詳細は4項参照。

複合材モデル:最大変位0.000559mm
2021-05-21-10-29-30.png

今回(連結モデル):最大変位0.000510mm
2021-05-21-10-29-37.png

部品間に隙間があるモデルの場合

前記したモデルは、2ヶの部品間に隙間なく(隙間ゼロ)配置されたモデルを作りで解析したので、2ヶの部品間に意識的に隙間を設けて配置した場合も解析できるかどうか確認します。(複数の部品を作りこれらを配置してAssyとした時、通常は、部品間に微妙な隙間や食い込みが生じてしまう。)
部品間の隙間がないモデルを保存した後、部品間に隙間があるモデルの解析用に別名で保存します。

モデルの作成

現状のモデルに対し、Barを0.5mm分Z方向に移動させてBaseとBarに0.5mm分の隙間を空けます。
Salome画面をGeometry画面に変更します。

Barを0.5mm分Z方向に移動

メニューバー上の「Operation」「Transformation」「Translation」を選択。
Nameを「Bar0.5」に設定、Objectsを「Bar」に設定、Dzを0.5に設定し、「Apply and Close」ボタンをクリック。
この状態で、Solidは、「Bar」「Bar0.5」「Base」の3ヶ存在する事になります。

複合モデル(Compound)の作成

「Bar0.5」と「Base」のSolidを使って、新しい複合(Compound)モデルを作ります。メニューバー上の「New Entity」「Build」「Compound」を選択します。
Objectsを「Base」と「Bar0.5」を選択(ctlキーを押したままクリックして選択)します。テキストボックス内には、「2_Objects」と表示されます。
これで、Compound_1と言うobjectがツリーに追加されます。
Compound_1を右クリックして、「Show only」を選択して表示させ、モデルを水平にすると、少し隙間が空いたモデルになっていることが確認できます。

Entity の作成

Compound_1の下に必要なグループを作成します。
下記のように作成した。この名前は、前回解析した名前と同じ名前になっているがツリーが異なっているの
で同じ名前でも構わない。(解析は、Compound_1を使うので、この下に解析時に必要になってくるFaceなどを定義しておく必要があります。)

2021-05-21-13-04-24.png

メッシュの作成

同様にメッシュを作成します。Objectは、「Compound_1」になることに注意。
Object Browserツリー上にMesh_2が新しくでき上がります。

Aster Codeの作成

Geometry は「Compound_1」、メッシュは「Mesh_2」となることに注意します。
境界条件は、Baseの下面(fix)を固定し、Bar の上面(press)を0.1mm 押し下げる条件にします。(BaseとBar に0.5mmの隙間を設けたので、Barを0.1mm押し下げても Baseに接触しない値に設定します。)
変位は、fix面を固定(XYZ 方向は0)、press面をZ方向に-0.1(XY 方向は 0)で指定。圧力は、適当な面に適当な値を入力しておく。(圧力の境界条件は、あとで削除します。)
結果ファイルは、新しく作成して保存しておきます。ファイル名は、multi-bar-1-1.rmedとしました。

Aster Codeの編集

境界条件(AFFE_CHAR_MECA)は、PRES_REPを削除し、連結(LIAISON_MAIL)を追加します。材料定数は、両部品とも、E:130300MPa、NU:0.343の値を入れました。
最終的にツリーの構造は、下記。

multi-ba-1-1.comm
mecabc = AFFE_CHAR_MECA(DDL_IMPO=(_F(DX=0.0, 
                                     DY=0.0,
                                     DZ=-0.1,
                                     GROUP_MA=('press', )), # Z方向に-0.1mm変位させる
                                  _F(DX=0.0,
                                     DY=0.0,
                                     DZ=0.0,
                                     GROUP_MA=('fix', ))), # 固定
                        LIAISON_MAIL=_F(GROUP_MA_ESCL=('ContBase', ), # 連結する相手の面
                                        GROUP_MA_MAIT=('Bar', )), # 連結する部品
                        MODELE=model)

連結する部品に連結する相手の面が含まれるように、MAITとESCLを決めます。(面が部品からはみでないよ
うにします。)この様に決めると、警告がでない。逆(面が部品からはみでる)に、決めると警告がでます。
詳細は、4項参照。

計算開始、結果の確認

前回と同様な方法で計算開始します。
警告はでますが、計算は、エラーなく無事終了します。
隙間が0.5mmあるものに対して、0.1mm下げるので、普通に考えると、接触せず、応力は発生しないはずですが、部品を連結している為、連結部で荷重や変位がそのまま相手側に伝わり、解析するので、応力が発生しています。

変位
2021-05-22-08-10-55.png

相当応力
2021-05-22-08-11-12.png

その他(負荷面の形状を規制する方法)

荷重を掛けたり変位させたりして負荷をかける場合、負荷面の形状を保ちながら負荷を掛けたい時には、下記のように境界条件を設定します。
今回の連結問題は、Doc:CAETutorials「9 Salome & Code-Aster JML's Tutorials (CAELinux beta 2)」で公開されている「JMLtutorials.zip」内の「caelinux4.pdf」を参考にして、解析しています。この資料内に負荷面の形状をを変化させず変形させる事例があったので、ここで確認します。

平面を保ちながら荷重を掛ける時(平面の形は変化する)

Barの突き出た端面に荷重を掛ける。この時、端面の平面を保ちながら荷重を掛けます。(平らな平面で端面を押すイメージ。平面で押すため、端面は平面を保ちながら変形していきます。)
端面を「EndFace」と言う名前でグループ化しておきます。
この時のAFFE_CHAR_MECAのツリー構造は、下記。

multi-bar-1-1.comm
mecabc = AFFE_CHAR_MECA(DDL_IMPO=_F(DX=0.0,
                                    DY=0.0,
                                    DZ=0.0,
                                    GROUP_MA=('fix', )), # 固定
                        FORCE_FACE=_F(FX=0.1,
                                      GROUP_MA=('EndFace', )),
                        LIAISON_MAIL=_F(GROUP_MA_ESCL=('ContBase', ), # 連結する相手の面
                                        GROUP_MA_MAIT=('Bar', )), # 連結する部品
                        LIAISON_UNIF=_F(DDL=('DX', ), # 端面のX方向(荷重を掛ける方向)の寸法を等しくする
                                        GROUP_MA=('EndFace', )),
                        MODELE=model)

LIAISON_UNIFコマンドを使って、この指定を行っており、上記の内容で、EndFaceは平面を保ったまま変位していくことになります。上記内容は、X方向しか規定していない為、EndFaceは平面のままですが、YZ方向には変形しますので、平面の形は変化します。

平面の形状を保ちながら荷重を掛ける時

EndFaceの形そのものを保ちながら変形させたいのであれば、DXだけ出なく全方向(DX,DY,DZ)で規定すれば、形を保ったまま変形します。

規制なし(500,000倍)
2021-05-22-09-01-42.png
DXを規制(500,000倍)

2021-05-22-09-01-55.png
X方向が等しく変化

DX、DY、DZを規制(500,000倍)
2021-05-22-09-02-05.png
平面の形状を保ち変化

連結の定義方法

部品を連結させる時に、どの面をESCLに、どの部品をMAITにすればよいか(定義方法)を確認します。
右図のモデル「cube-pole.stp」で連結させるグループの全組合せで計算できるかどうかを確認します。

2021-05-23-09-01-44.png

この結果が下表の結果となりました。この結果から、最終的には下記の方法で決定すれば、エラーやアラームが発生しません。
考え方は、大きな本体部品に、小さい接着部品を連結させると考えて、本体の部品と小さい部品の接着面を定義します。(接着面に接着剤をつけて本体に接着すると考え、この時に接着剤がはみでない様に部品(MAIT)と接着面(ESCL)を定義すればよい。)
指定方法は、

オペラント 対象 意味
LIAISON_MAIL 連結コマンド
GROUP_MA_MAIT Cube 連結する本体の部品Cube(Volume)
GROUP_MA_ESCL ContPole 本体に接着する部品Poleの接着面(Face)

とすればよいことになります。

No. GROUP_MA_MAIT GROUP_MA_ESCL 結果
1 Pole Cube エラー発生
2 Pole ContCube 計算できる(警告はでます)
3 ContPole Cube エラー発生
4 ContPole ContCube エラー発生
5 Cube Pole 計算できる(警告はでます)
6 Cube ContPole 計算できる(警告なし)
7 ContCube Pole エラー発生
8 ContCube ContPole エラー発生

2項「部品間の隙間がないモデルの場合」の例は、Base、Barのどちらを本体側にしても、接着面が部品からはみでてしまうので警告は必ず発生します。従って、正しくは、Baseを MAITにし、Bar側の接触面のみを新たに定義してESCLとして、解析する事になります。
また、2-6項の変位のコンター図を見ても明らかな様に、contBase面とBarを連結させた為、contBase面全体とBarが連結されており、contBase面が一様に変形している。→ここでも誤差が生じていることになります。やはり、Bar側の接触面のみをESCLとして定義して解析すべきか。

境界条件の設定方法のまとめ

今回、「AFFE_CHR_MECA」コマンドで連結を定義したので、このコマンドの使い方についてまとめてみます。

区分 オペラント 対象 意味
荷重 点に働く荷重 FORCE_NODALE GROUP_NO 1点当たりの荷重
線に働く荷重 FORCE_ARETE GROUP_MA 単位長さ当たりの荷重
面に働く荷重 FORCE_FACE GROUP_MA 単位面積当たりの荷重
体積に働く荷重 FORCE_INTERNE 単位体積当たりの荷重
GROUP_MA 密度の値にすると 1G の加速度が働くことと等価。
TOUT 自重のたわみを計算できます
圧力 PRES_REP GROUP_MA 面に垂直方向に働く圧力
変位 各部 DDL_IMPO GROUP_NO 変位
GROUP_MA
関係 連結 LIAISON_MAIL 部品同士を連結
GROUP_MA_MAIT 本体の部品(Volume)
GROUP_MA_ESCL 小さい部品の接着面(Face)
変形の規制 LIAISON_UNIF GROUP_MA 定義したグループは規制した方向に変形しません。
DX,DY,DZ 全方向で規制すると、そのグループは変形しません。
(形状を保ったまま変形します)

ソースコード

multi-bar-1.commの内容
DEBUT(LANG='FR')

mesh = LIRE_MAILLAGE(FORMAT='MED',
                     UNITE=20)

model = AFFE_MODELE(AFFE=_F(MODELISATION=('3D', ),
                            PHENOMENE='MECANIQUE',
                            TOUT='OUI'),
                    MAILLAGE=mesh)

Aluminum = DEFI_MATERIAU(ELAS=_F(E=70600.0,
                                 NU=0.345))

steel = DEFI_MATERIAU(ELAS=_F(E=212000.0,
                              NU=0.293))

materfl = AFFE_MATERIAU(AFFE=(_F(GROUP_MA=('Base', ),
                                 MATER=(Aluminum, )),
                              _F(GROUP_MA=('Bar', ),
                                 MATER=(steel, ))),
                        MODELE=model)

mecabc = AFFE_CHAR_MECA(DDL_IMPO=_F(DX=0.0,
                                    DY=0.0,
                                    DZ=0.0,
                                    GROUP_MA=('fix', )),
                        LIAISON_MAIL=_F(GROUP_MA_ESCL=('contBase', ),
                                        GROUP_MA_MAIT=('Bar', )),
                        MODELE=model)

mecach = AFFE_CHAR_MECA(MODELE=model,
                        PRES_REP=_F(GROUP_MA=('press', ),
                                    PRES=0.1))

result = MECA_STATIQUE(CHAM_MATER=materfl,
                       EXCIT=(_F(CHARGE=mecabc),
                              _F(CHARGE=mecach)),
                       MODELE=model)

result = CALC_CHAMP(reuse=result,
                    CHAM_MATER=materfl,
                    CONTRAINTE=('SIGM_ELNO', 'SIGM_NOEU'),
                    CRITERES=('SIEQ_ELNO', 'SIEQ_NOEU'),
                    MODELE=model,
                    RESULTAT=result)

IMPR_RESU(FORMAT='MED',
          RESU=_F(MAILLAGE=mesh,
                  NOM_CHAM=('DEPL', 'SIEQ_NOEU', 'SIGM_NOEU'),
                  RESULTAT=result),
          UNITE=80)

FIN()
cube-poleの内容
DEBUT(LANG='FR')

mesh = LIRE_MAILLAGE(FORMAT='MED',
                     UNITE=20)

model = AFFE_MODELE(AFFE=_F(MODELISATION=('3D', ),
                            PHENOMENE='MECANIQUE',
                            TOUT='OUI'),
                    MAILLAGE=mesh)

mater = DEFI_MATERIAU(ELAS=_F(E=130300.0,
                              NU=0.343))

materfl = AFFE_MATERIAU(AFFE=_F(MATER=(mater, ),
                                TOUT='OUI'),
                        MODELE=model)

mecabc = AFFE_CHAR_MECA(DDL_IMPO=_F(DX=0.0,
                                    DY=0.0,
                                    DZ=0.0,
                                    GROUP_MA=('fix', )),
                        LIAISON_MAIL=_F(GROUP_MA_ESCL=('ContCube', ),
                                        GROUP_MA_MAIT=('Pole', )),
                        MODELE=model)

mecach = AFFE_CHAR_MECA(MODELE=model,
                        PRES_REP=_F(GROUP_MA=('press', ),
                                    PRES=0.1))

result = MECA_STATIQUE(CHAM_MATER=materfl,
                       EXCIT=(_F(CHARGE=mecabc),
                              _F(CHARGE=mecach)),
                       MODELE=model)

result = CALC_CHAMP(reuse=result,
                    CHAM_MATER=materfl,
                    CONTRAINTE=('SIGM_ELNO', 'SIGM_NOEU'),
                    CRITERES=('SIEQ_ELNO', 'SIEQ_NOEU'),
                    MODELE=model,
                    RESULTAT=result)

IMPR_RESU(FORMAT='MED',
          RESU=_F(MAILLAGE=mesh,
                  NOM_CHAM=('DEPL', 'SIEQ_NOEU', 'SIGM_NOEU'),
                  RESULTAT=result),
          UNITE=80)

FIN()
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?