OpenFOAMが発散したとき、最初に確認したい5つのポイント

OpenFOAMが発散したとき、最初に確認したい5つのポイント

記事
IT・テクノロジー
OpenFOAMで解析をしていると、
- 残差が突然大きくなる
- 途中まで進んでいた計算が止まる
- Courant数が急激に上がる
- 何を変更しても安定しない
といったことがあります。

こういうとき、設定ファイルを片っ端から変更するよりも、確認する順番を決めて原因を切り分ける方が効率的です。
今回は、OpenFOAMの計算が不安定になったときに、私がまず確認する5つのポイントを紹介します。

1.Courant数を確認する
非定常解析では、まず確認したい項目です。
特にVOF法などの気液二相流では、局所的に流速が大きくなることでCourant数が上昇し、計算が不安定になることがあります。

例えば、
- deltaT
- adjustTimeStep
- maxCo
- maxAlphaCo
などを確認します。

「最初は安定しているのに、途中から急に崩れる」というケースでは、発散直前のCourant数を見るだけでも原因を絞れることがあります。

2.メッシュ品質を確認する
次に確認するのがメッシュです。
checkMeshを実行すると、
- non-orthogonality
- skewness
- aspect ratio
などを確認できます。

ただし、checkMeshでFatal Errorが出なければ必ず問題ない、というわけではありません。
品質の悪いセルが、
- inlet付近
- 狭い流路
- 急拡大・急縮小部
- 気液界面が大きく変形する場所
などに存在すると、計算が不安定になることがあります。
数値だけでなく、問題のセルが「どこにあるか」も重要です。

3.境界条件を確認する
意外と原因になりやすいのが境界条件です。
例えば、
- inlet / outletの速度条件
- pまたはp_rgh
- turbulence関連変数
- alpha.waterなどの体積率
の組み合わせを確認します。
特に、以前作ったケースから設定をコピーした場合は注意が必要です。
設定自体に間違いがなくても、今回の流れ場には合っていないことがあります。
また、出口付近で逆流が起きるケースでは、outlet側の境界条件が不安定化の原因になる場合もあります。

4.初期条件を確認する
計算開始直後に発散する場合は、初期条件も確認します。

例えば、
- 初期速度と入口速度の差が大きい
- 圧力場が不自然
- 初期界面の位置が適切でない
- 計算開始直後から流量が大きい
といったケースです。

最終的に与えたい条件が物理的に正しくても、数値計算としては「最初の一歩」が厳しすぎる場合があります。
その場合は、
- 時間刻みを小さくする
- 初期流速を見直す
- 徐々に流量を上げる
- 初期界面を見直す
などが有効なことがあります。

5.発散する直前のログを見る
個人的には、ここがかなり重要です。
「発散した」という最後の状態だけでなく、
発散する少し前から、何が変化していたか
を確認します。

例えば、
- Uの残差が先に悪化している
- p_rghが急激に変化している
- Courant数が徐々に増えている
- continuity errorが蓄積している
- alphaの計算が不安定になっている
といった兆候が見つかることがあります。

これを見ることで、
原因になった現象と、その結果として発散した変数
を切り分けやすくなります。
一度に全部変更しない
計算が発散すると、
「時間刻みを変えて、solverを変えて、境界条件も変えて……」
と一度にいろいろ変更したくなります。
ただ、それで計算が安定しても、結局どこが原因だったのか分からなくなります。

私は基本的に、
1. ログを確認する
2. 原因の仮説を立てる
3. 変更点を絞る
4. 再計算して確認する
という流れで切り分けています。
OpenFOAMは自由度が高い分、トラブルが起きたときに「どこから見ればいいのか分からない」状態になりやすいソフトです。
逆に、確認する順番を決めておくだけでも、かなり原因を探しやすくなります。

ココナラでは、
- ケースは動くが途中から不安定になる
- 発散原因の見当がつかない
- 境界条件や時間刻みが妥当か確認したい
- ログのどこを見ればいいのか分からない
といった既存OpenFOAMケースについて、設定やログを確認し、原因候補と次に確認する項目を整理するサービスも出品しています。

解析を一から作り直すのではなく、
「まず、どこを疑えばいいのか整理したい」
という段階で利用してもらうことを想定しています。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す