PISO法 — 非定常計算のトラブルシューティング
より充実した内容を piso-algorithm.html でご覧いただけます。
PISO法の典型的なトラブル
PISO法で非定常計算を走らせたら発散したんですが、何が原因でしょう?
PISO法の発散原因トップ5を見ていこう。
1. CFL数が大きすぎる
症状: 計算開始直後または流れが発達した後に発散
対策:
maxCoを0.5以下に設定(OpenFOAM の adjustTimeStep 使用時)- Fluent では Global Courant Number を1以下に
- PIMPLEに切り替えてnOuterCorrectorsを増やす
2. 初期条件が不適切
症状: 最初の数タイムステップで発散
対策:
- まずSIMPLE法で定常解を求め、それを初期条件にする
- 速度場をゼロではなく、近似的な流れ場で初期化
- 乱流量(k, omega)を適切に初期化(タービュレンス強度と長さスケールから)
3. 境界条件での逆流
出口で逆流が起こると発散するんですか?
特に渦放出のような問題では出口で局所的な逆流が生じやすい。
対策:
- 出口を十分下流に配置(物体から20D以上)
- OpenFOAM:
inletOutlet境界条件を使用 - Fluent: Backflow Direction Specification を有効に
4. メッシュ品質の問題
特にPISOで注意すべき品質指標:
| 指標 | 許容値 | PISO特有の注意 |
|---|---|---|
| 非直交性 | < 70度 | nNonOrthogonalCorrectorsで補正 |
| スキューネス | < 0.85 | Skewness Correctionを有効に |
| セル体積比 | < 10:1 | 急激な変化は圧力振動の原因 |
5. 時間離散化と空間離散化の不整合
症状: 計算は安定だが結果が非物理的
原因: 2次時間離散化(backward)を使いながら、空間は1次風上 → 時間精度と空間精度の不釣り合い
対策: 時間と空間の精度を揃える。2次時間なら空間も2次以上にすべきだ。
PISO vs PIMPLE の選択判断
PISOとPIMPLEのどちらを使うべきか、判断基準を教えてください。
迷ったらPIMPLEが安全、精度を追求するならPISO、という理解で合ってますか?
そのとおり。PIMPLEのnOuterCorrectors=1にすれば実質PISOだから、まずPIMPLEで始めて、安定したらnOuterCorrectors=1に減らすという戦略もあるよ。
「PISOで計算したのに圧力振動が止まらない」——よくある罠
PISOを使って非定常計算をしているのに圧力場がギザギザに振動する——という相談は意外と多い。原因の多くは「nCorrectors(補正ループ回数)が1になっている」こと。デフォルトが1のソルバーでは、1ステップに1回しか圧力補正をしないのでPISOの真の強みが出ない。2〜3回にするだけでスムーズになることがある。もう一つの原因が境界条件のタイムステップ非整合——入口条件が時間に対して階段状に変化していると、その不連続がPISO反復の中で増幅される。PISOのトラブルは「アルゴリズムの設定パラメータ」と「境界条件の時間整合性」の2点から疑うのが診断の定石です。
トラブル解決の考え方
「解析が合わない」と思ったら
- まず深呼吸——焦って設定をランダムに変えると、問題がさらに複雑になる
- 最小再現ケースを作る——PISO法の問題を最も単純な形で再現する。「引き算のデバッグ」が最も効率的
- 1つだけ変えて再実行——複数の変更を同時に行うと、何が効いたか分からなくなる。科学実験と同じ「対照実験」の原則
- 物理に立ち返る——計算結果が「重力に逆らって物が浮く」ような非物理的な結果なら、入力データの根本的な間違いを疑う
関連トピック
なった
詳しく
報告