MMS: 非圧縮性ナビエ・ストークス方程式 — トラブルシューティングガイド
より充実した内容を mms-navier-stokes.html でご覧いただけます。
非圧縮NS方程式のMMSが特に難しい理由
熱伝導のMMSはすんなり次数が出たのに、ナビエ・ストークスにしたら全然ダメで…。何が違うんでしょう?
非圧縮NSには他の方程式にない制約が2つあるんだ。第一に連続の式 \( \nabla\cdot\mathbf{u} = 0 \) が「時間発展しない拘束条件」であること——製造解の速度場がこれを満たさないと、質量ソース項を注入できないソルバーでは検証が成立しない。第二に圧力が拘束を保つためのラグランジュ乗数であること——圧力には固有の発展方程式がなく、境界条件・基準点・要素対の選び方(LBB条件)に敏感で、速度と同じ次数では収束しないのが正常だったりする。NS-MMSのトラブルの大半はこの2点に帰着するよ。
検証対象の方程式系を明示します(密度一定・動粘性 \( \nu \))。
$$ \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u}\cdot\nabla)\mathbf{u} = -\frac{1}{\rho}\nabla p + \nu \nabla^2 \mathbf{u} + \mathbf{s}_u, \qquad \nabla\cdot\mathbf{u} = 0 $$
運動量ソース \( \mathbf{s}_u \) は製造解 \( (\mathbf{u}_m, p_m) \) を左辺に代入して得ます。問題は連続の式側です。
症状1: 連続の式が満たせない——発散フリー製造解の作り方
任意に選んだ速度場は一般に \( \nabla\cdot\mathbf{u}_m \ne 0 \) です。連続の式に質量ソースを注入できるソルバー(自製コード等)ならそれでも検証できますが、多くのソルバーは連続の式を改造できません。その場合は最初から発散フリーの製造解を作ります。2次元では流れ関数 \( \psi(x,y) \) から
$$ u_m = \frac{\partial \psi}{\partial y}, \qquad v_m = -\frac{\partial \psi}{\partial x} $$
と作れば構成的に \( \nabla\cdot\mathbf{u}_m = 0 \) が保証されます。例えば \( \psi = \sin(\pi x)\sin(\pi y) \) から \( u_m = \pi\sin(\pi x)\cos(\pi y) \)、\( v_m = -\pi\cos(\pi x)\sin(\pi y) \)。3次元ではベクトルポテンシャル \( \mathbf{u}_m = \nabla\times\mathbf{A} \) を使えば同様です。圧力の製造解 \( p_m \) は速度と独立に選べます(例:\( p_m = \cos(\pi x)\sin(\pi y) \))。シンボリック導出の段階で \( \nabla\cdot\mathbf{u}_m \) がゼロに簡約されることを必ず確認してください——simplifyして残る式があれば作り方が間違っています。
症状2: 速度は収束するのに圧力の次数が出ない
| チェック項目 | 説明 |
|---|---|
| 圧力の不定性を固定したか | 全境界が速度指定だと圧力は定数分だけ不定。1点固定または平均ゼロ条件を課し、誤差評価も同じ規約で行う(平均を引いてから比較) |
| 要素対・スタガリングの理論次数 | Taylor-Hood系(速度2次/圧力1次)では圧力は速度より1次低いのが理論通り。等次数安定化(PSPC等)はその安定化項の次数も影響 |
| 境界近傍の圧力評価 | 流出境界・角部で圧力の次数低下が局所的に発生しやすい。内部領域だけのノルムで再評価して切り分ける |
| 圧力境界条件の整合 | 圧力指定境界に \( p_m \) の値を与えているか。速度境界では圧力に境界条件を課していないか |
「圧力の観測次数が速度より低い」こと自体は多くの離散化で仕様です。不合格なのは理論次数に届かない場合であって、速度と同じでない場合ではありません。合否基準は要素対ごとの理論値に対して設定します。
症状3: ソース項とソルバーの対流項定式化がずれている
対流項には数学的に等価な複数の書き方があります:移流形 \( (\mathbf{u}\cdot\nabla)\mathbf{u} \)、発散形 \( \nabla\cdot(\mathbf{u}\mathbf{u}) \)、歪対称形(両者の平均)、回転形。連続なら発散フリー場でこれらは一致しますが、離散レベルでは一致せず、ソルバーが内部でどの形を離散化しているかとシンボリック導出で使った形が食い違うと、微妙な次数汚染や一定レベルで止まる誤差として現れます。粘性項も同様で、\( \nu\nabla^2\mathbf{u} \) と \( \nabla\cdot\left[\nu(\nabla\mathbf{u} + \nabla\mathbf{u}^T)\right] \)(応力発散形)は発散フリーなら等価ですが、離散実装は別物です。ソルバーのドキュメント(または出力方程式)で定式化を確認し、同じ形で \( \mathbf{s}_u \) を導出するのが原則です。
症状4: 非定常で時間次数が出ない——射影法のスプリッティング誤差
SIMPLE/PISO/射影法系の圧力-速度分離解法は、時間刻みあたりにスプリッティング誤差を持ち込みます。実装によっては圧力の時間次数が速度より低く、境界近傍の圧力誤差層として現れることが知られています。診断の定石は次の順です。
- まず定常MMSで空間だけ検証 — 時間離散を切り離す。空間次数が出なければ時間以前の問題
- 時間検証は空間を十分細かく固定 — 空間誤差フロアより時間誤差が大きい範囲で \( \Delta t \) 系列を作る
- 反復(外部ループ)の収束を確認 — PISOの反復回数不足・SIMPLEの緩和が時間精度を落とす。刻みごとの残差低下を記録
- 時間積分の理論次数を確認 — 1次Euler陰解法で2次を期待していないか。ソルバー設定の時刻歴スキームを明記
症状5: MMSランが発散する
| 原因 | 説明と対策 |
|---|---|
| 製造解のレイノルズ数が高すぎる | 振幅・粘性の設定次第で実効Reが数千になり、定常層流解が不安定化。\( \nu \) を上げるか振幅を下げ、実効Reを10〜100程度に設計する |
| ソース項の振幅過大 | 波数を上げるとソース項は微分で \( \pi^2 \) 倍単位に増幅される。低波数(区間あたり1〜2周期)から始める |
| 初期条件の不整合 | 非定常MMSでは初期条件も \( \mathbf{u}_m(t=0) \) の厳密値で与える。ゼロ初期化は初期過渡で壊れる |
| 単位・無次元化の混乱 | 無次元ソルバーに有次元ソース項を入れていないか。導出時の記号定義(\( \rho \) で割った形かどうか)を照合 |
補足: 既知厳密解(Kovasznay流等)との使い分け
NSにはKovasznay流とかTaylor-Green渦みたいな厳密解もありますよね。MMSじゃなくてそっちで検証してもいいんですか?
両方使うのがベストプラクティスだよ。Kovasznay流やTaylor-Green渦はソース項注入なしでそのまま検証できるから、「ソース項の仕組み自体」への依存がない独立チェックになる。一方MMSは解の形・境界条件の種類を自由に設計できるから、検証のカバレッジ(全項が働く・任意の境界タイプ)で勝る。厳密解で基本を確認→MMSで網羅、の二段構えなら、ソース項導出のバグとソルバーのバグを相互に切り分けられる。
検証ラン品質チェックリスト(NS-MMS用)
- \( \nabla\cdot\mathbf{u}_m = 0 \) がシンボリックにゼロへ簡約されることを確認したか(質量ソース非対応ソルバーの場合)
- 対流項・粘性項の定式化をソルバー実装と一致させたか
- 圧力の不定性の固定方法を誤差評価と揃えたか
- 速度・圧力それぞれの理論次数(要素対依存)を明記したか
- 空間検証と時間検証を分離したか
- 実効Re・ソース項振幅を安定範囲に設計したか
基礎からの手順は統合版のMMS: 非圧縮性ナビエ・ストークス方程式、ソース項導出の自動化はMMSソース項の自動導出、次数が出ない一般論はMMS収束次数のトラブルシュートを参照してください。
関連トピック
なった
詳しく
報告