Elmerマルチフィジックス
理論:ソルバーを並べて連成する
概要
Elmerは無料のマルチフィジックスソフトと聞きました。どんな仕組みで複数の物理を解くのですか?
ソルバーを入力ファイルに並べて、順番に解くことを繰り返す仕組みだ。Elmerはフィンランドの研究機関CSCが1995年ごろから開発しているソフトで、熱伝導(HeatSolver)、電流(StatCurrentSolver)、弾性(StressSolver)、流体(FlowSolver)、磁場(MagnetoDynamics)など数十のソルバーを持つ。入力ファイル(.sif)には、Solver 1、Solver 2…と使うソルバーを書き、材料や境界条件を領域ごとに与える。定常の連成問題では、各ソルバーを順に解いて結果を次へ渡すことを、全体の変化が小さくなるまで繰り返す(分離型の連成)。強く結合した問題では反復が増えるので、緩和係数(Relaxation Factor)で収束を助ける。GUIで形状とメッシュを扱い、設定ファイルを作ることもできる。
ジュール発熱の連成方程式
φ は電位、σ(T) は温度で変わる導電率、k は熱伝導率、h は表面の熱伝達係数。電流の式と熱の式が導電率の温度依存を通じて結びつく。
丸棒の理論解
P′ は長さあたりの発熱、ρ は抵抗率、α は抵抗の温度係数、A は断面積、d・a は直径・半径、T_s・T_c は表面と中心の温度、q‴ は体積あたりの発熱。
北欧から生まれた無料の多物理ソフト
Elmerは、フィンランドの大学や研究所が共同で計算科学を進めるために作られ、2005年にオープンソースとして公開された。工学だけでなく、氷河の流れを解くElmer/Iceのように、地球科学の研究コミュニティでも広く使われていて、氷床のモデルとして気候研究に貢献している。
計算例
表は半径方向のみの簡易熱収支を反復した結果で、Elmerの実行結果ではない。抵抗率1.72×10⁻⁸ Ω·m、熱伝導率400 W/(m·K)を仮定。端面の放熱・放射・自然対流係数の変化は含めていない。
例:直径10 mmの銅棒に300 A(周囲20℃、抵抗の温度係数0.0039/K)
| 冷却条件 | 抵抗率一定(20℃) | 抵抗率の温度依存あり | 連成反復回数 | 内部の温度差 |
|---|---|---|---|---|
| 自然対流 h = 10 W/(m²·K) | 82.7 ℃ | 103.1 ℃ | 8 | 0.005 K |
| 弱い送風 h = 25 W/(m²·K) | 45.1 ℃ | 47.8 ℃ | 5 | 0.004 K |
温度が上がると抵抗が増えて発熱も増えるため、自然対流では20 Kも高くなる。反復は「電流→発熱→温度→抵抗率の更新」の繰り返しで、温度変化0.01 K未満を収束とした。冷却が弱いほど結合が強くなり、反復回数が増える。
Elmerで同じ問題を解いたら、表面温度が理論値より10 Kほど低く出ました。メッシュが粗いのでしょうか?
メッシュより先に、連成の反復が収束しているかを確かめよう。表のとおり、抵抗率を20℃の値のまま1回だけ解くと表面は83℃で、2回目で98℃、3回目で102℃と少しずつ上がる。全体の反復回数(Steady State Max Iterations)が小さいと、途中の値で止まって低めに出る。出力の「Steady state iteration」の各回で温度のノルムの変化がどう減っているかを見て、収束判定(Steady State Convergence Tolerance)を満たしているか確認する。棒の内部の温度差は0.005 Kしかないので、内部のメッシュを細かくしても結果はほとんど変わらない。むしろ結果を大きく左右するのは熱伝達係数で、h が10と25では表面温度が55 Kも違う。実際の自然対流では h は温度差によって変わり、高温では放射も加わるので、相関式から h を温度の関数として与えるとよい。
始め方の流れ
- ElmerGUIか公式の例題で、熱伝導だけの問題を1つ動かし、.sifファイルの構成を覚える。
- 同じ形状にStatCurrentSolverを加え、ジュール熱を熱源として渡す。
- 抵抗率を温度の関数で与え、全体の反復回数と収束判定を設定する。
- 丸棒の理論解と比べ、反復の収束とメッシュの影響を確かめる。
- 実際の形状に進み、熱伝達係数は相関式や測定から与える。
「収束したように見えて止まっていた」
連成解析のログで最後の反復の残差が小さく、計算が「正常終了」していても、全体の反復回数の上限に達して止まっただけ、ということがある。Elmerでは各ソルバーの内側の反復と、ソルバー間の外側の反復が別々に管理されていて、内側が収束していても外側が収束していないことがある。外側の反復で温度や電位がまだ変わり続けていないかを、最後の数回の値で確かめる習慣をつけておくと、こうした見落としを防げる。
よくある間違い
間違いと対策
| 間違い | 起きること | 対策 |
|---|---|---|
| 外側の反復が不足 | 温度を過小評価 | 収束判定と上限を確認 |
| 抵抗率を一定 | 発熱を過小評価 | 温度の関数で与える |
| 熱伝達係数を一定 | 表面温度がずれる | 相関式と放射 |
| 領域番号の取り違え | 材料が別の領域に | メッシュの番号を確認 |
| 強い結合で発散 | 反復が振動 | 緩和係数を下げる |
関連する内容も知りたいです。
関連するページはジュール発熱の電磁-熱連成解析、FEniCSプロジェクト、MOOSEフレームワーク、Palace電磁場解析、Code_Aster入門が参考になる。
よくある質問
Elmerとは何ですか?
フィンランドのCSC(IT Center for Science)が開発するオープンソースの有限要素ソフトです。熱伝導、構造、流体(Navier-Stokes)、静電場・静磁場・渦電流、音響など多くのソルバーを持ち、入力ファイル(.sif)で必要なソルバーを並べて連成させます。GUIのElmerGUIもあり、GPLライセンスで無料で使えます。
Elmerで連成解析はどう行いますか?
連成させるソルバーを同じ入力ファイルに書き、定常解析なら「Steady State Max Iterations」で全体の反復回数を決めます。各ソルバーを順番に解き、温度や電位などの結果を次のソルバーに渡すことを、変化が収束条件を下回るまで繰り返します。銅棒のジュール発熱の例では、抵抗の温度依存を入れると8回の反復で収束しました。
ジュール発熱の解析で気をつけることは?
電気抵抗率の温度依存と、表面からの熱の逃げ方です。直径10 mm・300 Aの銅棒では、抵抗率を20℃のままにすると表面温度83℃、温度で増える抵抗率を入れると103℃と20 Kも違います。一方、棒の内部の温度差は0.005 Kしかないので、内部を細かいメッシュにするより、熱伝達係数を正しく与えるほうが結果に効きます。
参考資料・検算の位置づけ
掲載値は本文の仮定に基づく教育用の参考計算。資料は理論・設定の参照先であり、本記事の数値を各ソフトで再現した証明ではない。設計・製造の判断には対象条件での検証が必要。
関連トピック
なった
詳しく
報告