OpenFOAM入門
理論:ケースの構成と、時間刻み・格子の決め方
概要
OpenFOAMを始めたいのですが、GUIがないと聞いて不安です。何から手をつければいいですか?
公式のチュートリアルを1つ、そのまま動かすところからだ。OpenFOAMでは1つの解析を「ケース」と呼ぶフォルダで表し、中に3つのフォルダがある。0/には各変数(速度Uや圧力p)の初期値と境界条件、constant/には物性(動粘度など)とメッシュ、system/には計算の時間や出力(controlDict)、離散化の方法(fvSchemes)、連立方程式の解き方(fvSolution)、メッシュの作り方(blockMeshDict)を書く。最初はキャビティ流れ(上蓋だけが動く正方形の箱)のケースを複製して、blockMeshでメッシュを作り、icoFoamで解き、ParaViewで見る。この一連が動いたら、設定を1つずつ変えて結果の変化を確かめていく。GUIがない代わりに、すべての設定がテキストとして残るので、条件の比較や自動化がしやすい。
レイノルズ数・クーラン数・計算量
U は代表速度(上蓋の速さ)、L は代表長さ(箱の一辺)、ν は動粘度、Δt は時間刻み、Δx は格子幅、N は一辺の分割数。icoFoamは非圧縮・層流の非定常ソルバーで、PISO法で圧力と速度を連成させる。
ロンドンの研究室から世界へ
OpenFOAMのもとになったFOAMは、1990年代にロンドンのインペリアル・カレッジで、C++で偏微分方程式を「方程式の見た目のまま」書けるライブラリとして開発された。2004年にオープンソースとして公開されてからは、企業や大学の利用が急速に広がった。ソルバーのコードが支配方程式とほぼ同じ形で読めることが、研究者が独自のモデルを組み込みやすい理由になっている。
計算例
例1:動粘度とレイノルズ数(上蓋1 m/s、一辺0.1 m)
| 動粘度 ν | レイノルズ数 | 粘性拡散の時間 L²/ν |
|---|---|---|
| 0.01 m²/s | 10 | 1秒 |
| 0.001 m²/s | 100 | 10秒 |
| 0.0001 m²/s | 1,000 | 100秒 |
チュートリアルの設定はν = 0.01(Re = 10)で、終了時刻0.5秒。
例2:格子の細かさと計算量(クーラン数1、0.5秒まで)
| 格子 | 格子幅 | 時間刻み | ステップ数 | 格子数 | 計算量(20×20を1) |
|---|---|---|---|---|---|
| 20×20 | 0.0050 m | 0.0050 s | 100 | 400 | 1 |
| 40×40 | 0.0025 m | 0.0025 s | 200 | 1,600 | 8 |
| 80×80 | 0.00125 m | 0.00125 s | 400 | 6,400 | 64 |
Reを1000にしたいので、動粘度を0.0001に変えるだけでいいですか?
それだけでは足りない。まず、Reが上がると箱の隅にできる小さな渦や、壁の近くの急な速度変化を表すために、20×20では粗すぎる。少なくとも80×80程度に細かくし、時間刻みもクーラン数が1を超えないように小さくする必要がある。次に、流れが落ち着くまでの時間が長くなる。粘性で運動量が箱全体に広がる時間の目安 L²/ν は、Re = 10の1秒に対してRe = 1000では100秒で、0.5秒で止めると途中の状態を見ているだけになる。endTimeを延ばし、中心線の速度分布が時間とともに変わらなくなったことを確かめてから結果を使う。さらにRe = 1000では、格子を細かくしても結果が変わらなくなるか(格子収束)を必ず見る。キャビティ流れには詳しい参照解(Ghiaらの表)があるので、それと比べるのが最初の検証として最適だ。
始め方の流れ
- チュートリアルのcavityケースを作業フォルダに複製する。
- blockMeshでメッシュを作り、checkMeshで品質を確認する。
- icoFoamで解き、ログで残差とクーラン数を確認する。
- ParaViewで速度と圧力を見る(paraFoamまたはfoamToVTK)。
- 設定を1つずつ変え、参照解と比べて検証する。
「すぐ発散した最初の改造」
チュートリアルを動かせた人が次にやりがちなのは、格子を細かくして、そのまま走らせることだ。ある学生は40×40にしたとたん計算が発散した。ログを見ると、クーラン数が2近くになっていた。格子幅を半分にしたのに、時間刻みを0.005秒のままにしていたためだ。時間刻みを0.0025秒にすると問題なく収束した。OpenFOAMでは controlDict で adjustTimeStep を使い、最大クーラン数を指定して時間刻みを自動で調整させることもできる。
よくある間違い
間違いと対策
| 間違い | 起きること | 対策 |
|---|---|---|
| 格子だけ細かくする | クーラン数超過で発散 | 時間刻みも小さく |
| Reを上げて同じ終了時刻 | 途中の状態を見る | 定常を確かめる |
| 境界名の不一致 | 起動時にエラー | 0/とメッシュの名前を揃える |
| checkMeshを飛ばす | 悪い要素で発散 | 品質を確認 |
| 参照解と比べない | 誤りに気づかない | ベンチマークで検証 |
関連する内容も知りたいです。
関連するページはOpenFOAMメッシュ生成、OpenFOAM並列計算、キャビティ流れ、PISO法、SU2 CFDソルバーが参考になる。
関連トピック
なった
詳しく
報告