ElmerのTurorialをやってみる

ElmerというオープンソースCAEソフトウェア( https://www.csc.fi/web/elmer )があります。

FEMベースの偏微分方程式ソルバーで、流体解析、熱伝導解析、応力解析、電磁界解析などの幅広い機能を包含し、しかも連成解析もできる優れものということで、以前から名前は知っていたのですが、今回、いろいろ試してみることにしました。

最終的な目的は、モーターやPM発電機の設計に使いたいことと、大変形を伴う柔らかい羽根回りの流れ解析を実施したいということになりますが、その準備として、導入からチュートリアルのいくつかまでを実行してみたいと思います。

# Elmerの導入

Elmer自体は、ソース及びバイナリで提供されており、Windows（64bit）からLinux,MacOSまで対応しています。ここでは学生が使うことを前提に、お手軽にWindows Binaryを導入してみます。

1. Windows Binaryのダウンロード
https://sourceforge.net/projects/elmerfem/　からnightly buildパッケージをダウンロードして落ちてきた実行ファイルをインストールします。
インストールすると登録されるElmerGUIがアプリケーションの起動アイコンになります。

2. Elmer (windows)の起動
ElmerGUIアイコンをクリックして、起動します。

![SnapCrab_ElmerGUI_2019-1-9_21-25-53_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/74247/e7de290d-98fe-a9f5-afec-468faf4a7d0c.png)

# Tutorial の実行
https://www.csc.fi/web/elmer/documentation にあるElmerTutorials.pdfを参考にいくつか実施してみます。

## Tutorial 1: 熱伝導解析 (Heat equation – Temperature field of a solid object)
アルミニウム製物体の境界の一部が293Kに保たれ、物体の内部発熱がh=0.01W/kgの定常温度分布を計算するTutorialです。

1.形状ファイルを開く(File > Open > pump_carter_sup.stp)
サンプルとして提供されているCADデータは以下にあります。ファイルを開くと、Geometry viewerが起動し、マウスで動かすことができます。また、形状に応じて自動的にメッシュ生成が行われます。
C:\Program Files (x86)\Elmer *****\share\ElmerGUI\samples\step

メッシュの情報は、メニューのModel > summaryから確認できます。デフォルトで作成されたメッシュは、以下のようなサイズになりました。

```
FINITE ELEMENT MESH
Mesh dimension: 3
Leading element dimension: 3
Nodes: 7877
Volume elements: 34248
Surface elements: 8328
Edge elements: 12492
Point elements: 0
  :
```

STEPファイルと比べて面のメッシュがあらすぎるため、メニューで以下のように変更します。
Remeshを実行すると、かなり滑らかにメッシュが生成されます。

```
View -> Cad model...
（Geometry viewer windowから）
Model -> Preferences...
　　Restrict mesh size on surfaces by STL density = on
　　Apply
Mesh -> Remesh
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/74247/7a976b05-2578-b8cc-8e66-e3f229f67046.png)

３つの大きな穴の面（6つのサーフェス）を温度一定(293K)の境界面とするため、
ctrlキーを押しながらダブルクリックして連続選択します。その後、
Mesh > Unify Surface で結合します（結合すると、どこか1面をダブルクリックすると3つの穴面が選択されます）。

2. 計算設定条件および方程式等の設定
今回は、3次元定常熱伝導のため、以下の設定を行います。

```
(3D定常計算)
Model
  Setup
    - Simulation Type = Steady state
    - Steady state max. iter = 1
  Apply

（熱伝導方程式）
Model
  Equation
  Add
    Name = Heat Equation
    Apply to bodies = Body 1
    Heat Equation
      Active = on
    Add
    OK

（材料特性：熱物性）
Model
  Material
    Add
      Material library
        Aluminium (Generic)
      Apply to bodies = Body 1
    Add
    OK

（体積発熱の定義）
Model
  Body Force
    Add
      Name = Heating
      Heat Source = 0.01
    Apply to bodies = Body 1
    Add
    OK

（境界条件の定義）
Model
　　BoundaryCondition
　　Add
　　　Heat Equation
　　　Temperature = 293.0
　　　Name = RoomTemp
　　Add　　　　　
　　OK

（境界条件の設定）
Model
  Set boundary properties

さきほど作成した３つの穴内側の面をダブルクリックし、赤色に選択された状態とすると
Properties for boundaryというウインドウが開きますので、

Boundary condition
　　RoomTemp
　　Update

と選択します。
```

3. SIFファイルの生成とプロジェクトの保存
以上の設定は、Sif（Simulation input file）としてテキストに保存することができます。

```
（Sifの生成＆編集）
Sif
  Generate
  Edit --> 適当に数値をいじるのに便利です。

（プロジェクトフォルダの保存）
File 
  Save Project (あらかじめ作成したフォルダに各種設定ファイル、CADデータが保存される)
```

4.実行

Convergence monitorが表示されますが、今回は1回だけなので瞬間的に終わります。
また、Solver.logも表示されます。
```
Run
  Start solver
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/74247/db0cb67c-2ffb-1500-1ab1-8509cae41d38.png)

5.可視化
ElmerではParaviewで表示可能なvtu形式で出力することができ（要指定）、OpenFOAMユーザーは容易に可視化することができるでしょう。Runメニューにあるstart paraviewではなぜか起動できなかったので、直接Windowsメニューからparaviewを起動し、生成されたvtuファイルを読み込みます。
 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/74247/c9c19254-188f-1ff5-b557-11340befb3e5.png)

## 並列計算

Elmer(MPIに対応版Buildであれば)は、MPICH2を利用した並列計算も可能になっています。
https://sourceforge.net/projects/elmerfem/files/WindowsBinaries/Win64InstallerMPI/elmerfem-mpi-nightly_Windows-AMD64.exe/download

また、Windows環境の場合、上記のMPI対応版でMS-MPIを一緒にインストールできます。
（もしかしたらすでに入っているかもしれませんが）
そのあとに、Run > Parallel settingsで以下の設定をすれば実行できます。

・ Use parallel solverに☑
・ Number of processesを指定
・ ExecutableにMicrosoft MPIのmpixec.exeの指定
・ Arguments から”-localonly”を削除

![image.png](https://qiita-image-store.s3.amazonaws.com/0/74247/f9e425b8-486f-06d2-5eb4-81829851cd8e.png)