Salome-Meca 2019を用いたモーダル解析（SDLV）

# 本演習の目的
構造物を設計する場合、構造物の固有振動数がどこにあるのか、また、その周波数で強振した場合、どのような形状で強振しているのかが、問題になることがあります。
強振して構造物が破壊した場合、これらの事がわかれば、対策がとれます。
このため、ここで固有振動数と変形の形状を解析する方法（モーダル解析）を示します。

この資料はオープンCAE勉強会＠岐阜で公開されているFS氏ご提供の「[SALOME-Mecaの使用法解説](http://opencae.gifu-nct.ac.jp/pukiwiki/index.php?SALOME-Meca%A4%CE%BB%C8%CD%D1%CB%A1%B2%F2%C0%E2)：[10.0モーダル解析](http://opencae.gifu-nct.ac.jp/pukiwiki/index.php?plugin=attach&refer=SALOME-Meca%A4%CE%BB%C8%CD%D1%CB%A1%B2%F2%C0%E2&openfile=10-00.pdf)」をSalome-Meca 2019（Code_Aster 14.4）を用いて実行しました。

# 解析の概要
単純な片持ちばりのモデルを読み込み、片側端面を固定した場合の固有振動数を確認します。
モデル寸法および境界条件を示します。
## ジオメトリ

幅10mm×高さ20mm×長さ100mmの直方体

## 材料
モーダル解析など動解析には、ヤング率やポアソン比とともに質量密度が必要です。
単位はSI[mm]系としています。従って、質量密度の単位がton/mm3になっていることに注意してください。
ここでは、ベリ銅の材料定数として、以下を入力します。（機械実用便覧 第5版 日本機械学会より引用）

- ヤング率：E=132,000MPa
- ポアソン比：$\nu$=0.343
- 密度：$\rho$=8.96e<sup>-9</sup> Ton/mm<sup>3</sup>

## 拘束条件

|境界条件|トポロジ|境界条件の種類|条件|
|:--|:--|:--|:--|
|fix|面|変位|DX=DY=DZ=0|

# 解析手順

~/CAE/modal/というフォルダーを作り、この中で解析することにします。

## モデル形状のインポート
Salome-Meca2019を起動します。
Salome-Mecaの起動画面から、SALOMEモジュールの選択ドロップダウンリストを「Geometry」に変更します。

メニューバーより、「File」＞「Import」＞「STEP」で、片持ちばりのモデル「bar-100x20x10.stp」をインポートします。

単位変換を行うかWarning画面が表示されますので、「No」をクリックします。

![2020-04-30-13-07-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/7742e06f-0901-f151-c57d-d060ce57eef2.png)

固定部のグループ化を行います。
グループ化は、Salome-Mecaのメインツールバーで、「NewEntity」＞「Group」＞「Create Group」とし、「Create Group」画面上で「Shape Type」の「Face」にチェックします。
Nameは、この場合「fix」とします。

Main Shapeは、矢印ボタンをクリックした後、Object Browserツリー内にインポートしたジオメトリ名（Product_1）をクリックして指定します。
モデル上で「Product_1」端面をクリックして指定し、「Apply and Close」をクリックします。

![2020-04-30-13-09-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/97a1a7c3-a4af-92ac-bb2d-f88114aaf3fb.png)

## 要素分割

Salome-Mecaのメインツールバーで、「Geometry」と表示されている下向き矢印をクリックし、「Mesh」を選択します。
メニューバーより、「Mesh」＞「Create Mesh」をクリックし、「Create Mesh」画面を表示します。
名前はデフォルトの「Mesh_1」のままにします。
「Product_1」がGeometryフィールドにあることを確認します（そうでない場合は、Geometryの横にある曲線矢印を選択し、Object Browser上より、「Product_1」を選択します）。
メッシュタイプは「Any」のままとします。
「Assiign a set of hypotheses」から「3D:Automatic Tetralization」を選択します。

![2020-04-30-13-11-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/764ea8fc-3d59-87eb-eba6-8d7cb8e0fe9d.png)

「Hypothesis Construction」画面で、「Length」を「5」に変更して、「OK」をクリックします。

![2020-04-30-13-11-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/6f2bae0a-e281-2367-2830-e08ce09458ef.png)

「Apply and Close」をクリックします。

メニューバーより、「Mesh」＞「Compute」を選択してメッシュを作成します。

メッシュ作成が終了すると、「Mesh computation succeed」画面がでるので、Nodes（節点）=154個、Tetrahedrons（四面体の1次要素）=470個と確認できます。
「Close」をクリックします。

![2020-04-30-13-13-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/92cc2b49-c05d-dd76-be95-570b39b3be51.png)

メニューバーより、「Modification」＞「Conver to/from quadratic」を選択して、「Mesh_1」を2次要素に変換します。
「Apply and Close」をクリックします。

![2020-04-30-13-15-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/0959707b-a9fb-b842-f4c7-b0344ad3c000.png)

メニューバーより、「Mesh」＞「Mesh Information」を選択して、メッシュ情報を確認できます。
「OK」をクリックします。

![2020-04-30-13-16-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/71647e64-b620-bd1a-806f-8139dabb3bd6.png)

メニューバーより、「Mesh」＞「Create Groups from Geometry」を選択して、Geometryモジュールで追加したグループをメッシュにも作成します。

Geometryモジュールで作成したグループを選択すると、次図のようにグループ名が追加されます。
「Apply and Close」をクリックします。

![2020-04-30-13-17-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/ab1e98a4-3f77-04ea-681f-544fba1fe029.png)

## 解析条件の設定
コマンドファイル作成のアシスタント機能を用いて、コマンドファイルを作成します。

Salome-Mecaのメインツールバーで、Mesh表示されている下向き矢印をクリックし、AsterStudyを選択します。

メニューバーより、「Operations」＞「Add Stage with Assistant」＞「Modal Aanalysis」をクリックします。

![2020-04-30-13-18-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/5ef8fbad-9a00-f554-323c-30023d945cd6.png)

「Modal Aanalysis」のイントロダクションが表示されますので、「Next>」をクリックします。

![2020-04-30-13-19-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/57325d02-8b93-78b5-84d8-ff4b11b40c03.png)

「Mesh_1」が選択されていることを確認し、「Next>」をクリックします。

![2020-04-30-13-19-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/739f3ab5-7fee-0df3-6c89-884c32814f3a.png)

「3D」が選択されていることを確認し、「Next>」をクリックします。

![2020-04-30-13-21-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/b862dde5-3571-e470-dbb3-2985583a9ce3.png)

### 材料物性値の定義

次の値を入力し、「Next」ボタンをクリックします。

* ヤング率 132000 MPa
* 密度 8.96e<sup>-9</sup> ton/mm<sup>3</sup>
* ポアソン比 0.343

### 境界条件の定義

次の画面上で固定部の境界条件を入力します。
境界条件の追加ボタンをクリックします。
Group:fix を選択します。
DX:0 DY:0 DZ=0 を入力します。
「Next」ボタンをクリックします。

![2020-04-30-13-48-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/f20d5e30-9c81-dfd0-aa13-7f58e1b16486.png)

求めるモーダル解析を選択します。
ここでは、「N first eigenmodes」を選択します。
「Number of frequency」（求めようとする固有振動数の数）はデフォルトの「10」のままにします。
「Next」ボタンをクリックします。

![2020-04-30-13-48-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/16ac9cf4-c850-2dfb-5139-166db30143ad.png)

結果ファイル名を設定します。
今回は、GeometryやMeshファイルと同じフォルダー（~CAE/modal）に「modal.rmed」として設定しました。
「Finish」ボタンをクリックしてアシスタント設定は完了します。

![2020-04-30-13-52-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/1c61d7ad-8647-8984-d89b-eb40532deed2.png)

CALC_MODES上で右クリック＞Analysis_Summary
で、今回の解析モデルの概要が表示されます。

![2020-04-30-14-26-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/33cac90f-7fe3-583c-c906-e1b971d51e4b.png)

## 解析の実行

Object Browserで、「History View」タブを選択します。
ここでは、すべてのケースと実行中の解析を確認できます。
現在、「Stage_1」には赤い「□」ボタンにチェックが付いていますので、「+」ボタンをクリックします。

![2020-04-30-13-54-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/606effe6-e91c-65ed-10a5-333855b2ecf8.png)

パネル下部の「Run」で解析を実行します。
パネル右下の「Auto Refresh:No」をプルダウンして、「Auto Refresh:5s」に変更します。

![2020-04-30-13-55-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/f0d5297e-01de-cc74-3d56-f4ff71f428ae.png)

すべてが正常に実行されると、解析が正常に完了したことを示す緑色の丸が表示されます。

![2020-04-30-13-58-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/c1e94e30-5113-22a4-f6c8-42933c631bd8.png)

## 結果の表示

「Data Files Summary」より、結果ファイル（modal.rmed）を右クリックして、「Post-process」を選択します。

![2020-04-30-13-59-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/97f835a9-cf4b-727a-1376-00d1f38a2347.png)

新しいウィンドウの初期化を待ちます。
Post-processが開き、次の画面になります。
「Results」タブがアクティブになります。

現在の表示画面の情報が表示される右上に固有振動数が表示されます。

アニメーションの表示用ボタンで結果を切り替えます。

![2020-04-30-14-20-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/c44d77d4-7b7e-fa07-8b82-4ec8365365db.png)

### 変形の形状

1次：623Hz

![2020-04-30-14-46-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/df6e7fe4-3691-4f7b-2017-86113a1a6373.png)

2次：1212Hz

![2020-04-30-14-48-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/5df064b8-b83d-a0b4-aa07-2c43595d68ee.png)

3次：3730Hz

![2020-04-30-14-49-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/cc660d4a-ed6d-0292-12c5-3357892bb833.png)

4次：4443Hz

![2020-04-30-14-49-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/ae233e16-76ec-d1e9-5545-a2c6857468cd.png)

# Code_Asterコマンドファイル

以下に、Code_Asterコマンドファイルの内容を示します。

```python:bar100.com（単純な片持ち梁のモデル）
DEBUT(LANG='EN')

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=132000.0,
                              NU=0.343,
                              RHO=8.96e-09))

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', )),
                        MODELE=model)

ASSEMBLAGE(CHAM_MATER=materfl,
           CHARGE=mecabc,
           MATR_ASSE=(_F(MATRICE=CO('rigidite'),
                         OPTION='RIGI_MECA'),
                      _F(MATRICE=CO('masse'),
                         OPTION='MASS_MECA')),
           MODELE=model,
           NUME_DDL=CO('numeddl'))

result = CALC_MODES(CALC_FREQ=_F(NMAX_FREQ=10),
                    MATR_MASS=masse,
                    MATR_RIGI=rigidite,
                    OPTION='PLUS_PETITE')

IMPR_RESU(FORMAT='MED',
          RESU=_F(RESULTAT=result),
          UNITE=80)

FIN()
```

以上