2023年8月15日火曜日

FreeCAD上でElmer FEMを使用する方法

FreeCAD 0.21でElmer FEM (MPIバージョン)を使用するための手順を整理した.


前提条件

・FreeCADがインストールされている(今回は0.21を使う)


1. 準備

1.1. Elmerのダウンロード

 FreeCADにはElmerの実行に必要ななファイルが含まれていないため,まずElmer本体をダウンロードする必要がある.

 SourceForgeのElmerのページから,MPIバージョンのZIPファイル(ElmerFEM-gui-mpi-Windows-AMD64.zip)をダウンロードする.ダウンロードしたら解凍してProgram Filesなどに配置する.



1.2. Microsoft MPIのインストール

 MPIバージョンのElmerを実行するために必要なのでインストールする.Microsoft MPIで検索すれば公式のダウンロードサイトが見つかる.


1.3. FreeCADの設定

 FreeCADの設定>有限要素法>Elmerへと進む.設定に有限要素法の項目が表示されない場合は,ワークベンチをFEMに変更してから設定画面を開けば表示される. 

 Elmerバイナリの項目でElmerGridとElmerSolverのチェックを解除し,ElmerGrid.exeとElmerSolver_mpi.exeのパスを設定する.それぞれのexeファイルは,先にダウンロードしたElmerフォルダのbinフォルダの中にある.

 なお,ElmerSolverについては非MPIのElmerSolver.exeも同梱されているので間違えないよう注意する.

 

 最後に,Multithreadingの項目を任意の値に変更する.これでFreeCAD上でElmerを実行できるようになった.


2. Elmerによる熱伝導解析

 直方体モデルの両端に温度差を与え,その時の温度分布を計算する.


2.1. プリ処理

以降はモデル作成後,FEMワークベンチでの操作.

1) タスクバーのAボタンを押してAnalysisを追加する.


2) タスクバーのEボタン(CalculiXソルバアイコンの右にある)を押してElmerソルバを追加する.ボタンがない場合は求解メニュー(英語UIの場合はSolve)から追加する.


これによりコンボビューにSolverElmerの項目が追加される.

3) SolverElmerをクリックすると,タスクバーEボタンの右にあるいくつかのボタンがアクティブになる.ここで構造解析や熱伝導解析など解析手法(Equation)を選択できる.

 今回は熱伝導解析をするので温度計アイコンを選択する.


 SolverElmerの下にHeartの項目が追加される.


3) Heartをクリックする.ソリッド選択画面が開くので追加する.



4) 温度拘束を両端の面に追加する.今回は一方の面を300K,反対の面を350Kとした.また,初期温度として300Kを設定した.






 なお,タスクタブで温度を設定しても初期値の300Kに戻ってしまう不具合に遭遇した.プロパティウインドウからならちゃんと設定できた.


5) 材質を設定する.今回はABSとした.


6)最後にメッシュを作成する.ElmerではGmshで作成したメッシュが必要となる.


2.2. 解析実行

 コンボビューのSolverElmerをダブルクリックしてソルバコントロールを開く.まず,Writeボタンで解析設定用のファイルを生成する.次にRunボタンで実行する.


2.3. ポスト処理

※ここでの操作はFreeCAD0.21のものとなる.0.20以前とは異なるため注意.

 解析が終わるとコンボビューにSolverElmerOutputとSolverElmerResultが追加される.



SolverElmerResultをダブルクリックすると結果表示オプションへ移動するので,モードをSurface,カラーリングのフィールドをtemperatureに設定する.


これでモデル表面の温度分布を可視化できるようになったが,真っ赤となってしまう.これはカラーバーの範囲が初期値では-0.5~0.5となっているため.


 カラーバーをダブルクリックすると色グラデーションの設定ウインドウが開くので,パラメータの範囲で最大,最小値を設定しなおす.

以上の操作で,下のような温度分布が得られる.


3. 解析速度の比較

 MPIによる並列化でどれくらい計算が速くなるか,シングルスレッドと4スレッドで比較した.なお,スレッド数による効果がわかりやすくなるように,上述の解析の時よりメッシュをかなり細かくした.

 シングルスレッドの場合,Write44秒+Run68秒=112秒かかった.これに対して4スレッドではWrite50秒+Run21秒=71秒だった.

 Write+Runでは4スレッドのほうが約1.6倍,Runに限れば3.2倍速くなり,しっかりとマルチスレッドの効果が出ていることがわかった.


0 件のコメント:

コメントを投稿