MMS収束次数の算出方法 — トラブルシューティングガイド
より充実した内容を mms-convergence-rate.html でご覧いただけます。
観測次数の算出——基本式とあるべき姿
MMS(製造解法)や厳密解ベンチマークでコード検証を行うとき、最終的な合否判定は観測収束次数で下します。細分比 \( r \) のメッシュ系列で誤差ノルム \( E_h \) を測ったときの観測次数は
$$ p_{obs} = \frac{\ln(E_{rh}/E_h)}{\ln r} $$
で、これが離散化スキームの理論次数(形式次数)に漸近すれば合格です。健全な検証では、\( \log h \)-\( \log E \) プロットが理論勾配の直線に乗り、細かい水準ほど傾きが理論値に近づきます。このページでは、この数字が「出ない・乱れる・信じられない」ときの原因を、誤差の測り方そのものの誤りを中心に症状別に潰していきます。方程式側の原因(境界・ソース項・リミッター)はNS編・ソース項編も併せて参照してください。
症状0: そもそも誤差の測り方が間違っている(最頻出)
粗いメッシュと細かいメッシュで誤差を測ったんですが、次数が1.3とか2.8とか、実行のたびにバラバラで…。
方程式やコードを疑う前に、誤差ノルムの計算手順そのものを点検しよう。次数の測定は誤差の2〜4桁の変化を扱う精密測定だから、測り方の雑さがそのまま次数の乱れになる。チェックポイントは3つ。①厳密解の評価は数値解と同じ位置(セル中心なのか節点なのか積分点なのか)で行っているか。②ノルムに重みを入れているか——非一様メッシュで単純平均を取ると粗い領域と細かい領域の寄与が歪む。③セル平均量と点値を混同していないか——有限体積の解はセル平均だから、厳密解も同じくセル平均(またはh²オーダーの補正込み)で比較しないと、それだけで2次のノイズが乗る。
離散 \( L^2 \) ノルムの標準形は体積重み付きです。
$$ E_h = \left( \frac{\sum_i V_i \, (u_i - u_i^{exact})^2}{\sum_i V_i} \right)^{1/2} $$
この式のとおり、①同一位置評価、②体積重み、③解の種別(点値/セル平均)一致——の3点を守るだけで、「次数が乱れる」問題の相当数は消えます。
症状1: 次数が理論値より一貫して低い
| チェック | 内容 |
|---|---|
| 周期境界テスト | 全方向周期の製造解で内部スキームだけを検証。ここで次数が出れば境界処理が犯人(低次の境界外挿・境界条件の不整合) |
| ノルムの種類 | \( L^\infty \) だけ低いなら局所的な次数低下(角・境界層)。\( L^2 \) は出ているなら大域は健全 |
| 反復収束の深さ | 各水準で反復残差を離散化誤差より2桁以上下げたか。細メッシュほど判定が緩く効く(誤差が小さい)ので停滞に注意 |
| ソース項・初期条件の精度 | ソース項の数値積分次数・初期条件の投影精度がスキーム次数を下回っていないか |
| 解の滑らかさ | 製造解や厳密解自体に特異性(角の解の低正則性)があれば次数低下は理論通り=コードは無罪 |
症状2: 次数が水準間で振動する・単調に落ち着かない
2点式 \( p_{obs} = \ln(E_{2h}/E_h)/\ln 2 \) は隣接2水準しか使わないため、ノイズに敏感です。対処は2段階です。
- 水準を増やして最小二乗フィット — 4〜5水準の \( (\ln h_i, \ln E_i) \) に直線を当て、傾きを次数の推定値、残差をノイズの指標にする。2点式の「隣接ペアごとの次数」も併記すると漸近の進み方が見える
- ノイズ源を絞る — 振動が消えない場合、(a)メッシュ系列の非系統性(自動メッシャーの要素配置替わり)、(b)丸め誤差フロア(下記)、(c)反復打ち切り、の順で点検
特に(a)は非構造メッシュで頻発します。検証ランに限っては構造格子の一様細分(または同一トポロジーの相似細分)を使うのが、次数測定を安定させる最も確実な手段です。
症状3: 細かい水準で次数が頭打ち→劣化する
誤差には離散化誤差の他に丸め誤差・反復打ち切り誤差の「フロア」があり、細分でこのフロアに接近すると見かけの次数が落ちます。診断は簡単で、誤差の絶対値を見ることです。\( E_h \) が \( 10^{-10} \) 台(倍精度の有効桁の限界近く)まで落ちているなら、それ以上の細分は次数測定に使えません。対処は、①製造解の振幅を大きくして相対的にフロアを下げる、②粗い側の水準で次数を評価する、③反復ソルバーの判定をさらに厳格化する、です。「細かいほど良い」は次数測定では成り立たない——漸近域とフロアの間の「使える窓」で測るのがコツです。
症状4: 次数が理論値より高く出る
2次スキームで3〜4次が出る場合、喜ぶ前に疑うべきは①まだ漸近域に入っていない(誤差の高次項が支配的な前漸近域では見かけの次数は上下どちらにも振れる)、②誤差項の偶然の相殺——対称性の高い製造解・特定の波数で主誤差項が消える「超収束」です。確認法は、製造解の波数・位相をずらした別の解で再測定すること。それでも高次が出るなら、そのスキームの理論次数の理解(打ち切り誤差解析)の方を見直します。報告書には「別の製造解でも同傾向」の確認を添えるのが、超収束の誤報告を防ぐ作法です。
症状5: 時間次数がうまく測れない
非定常問題の時間次数測定は、空間誤差と時間誤差の混在が難所です。
- 空間を固定して \( \Delta t \) だけ振る — このとき空間誤差がフロアとして残るため、時間誤差がフロアより大きい範囲で系列を設計する
- 誤差の測定時刻を固定 — 同一の物理時刻 \( t^* \) で比較する。最終ステップが \( t^* \) に一致するよう \( \Delta t \) を選ぶ(端数ステップの混入は次数を汚す)
- 時空同時収束 — \( \Delta t \propto h \)(または \( h^2 \))で同時に細分し、複合次数を測る方法もあるが、解釈が難しいので分離測定を第一選択に
- 可変時間刻みは無効化 — 自動ステップ制御が効いていると系列の \( \Delta t \) が設計通りにならない
次数測定の品質チェックリスト
- 誤差ノルム:同一位置評価・体積重み・解種別(点値/セル平均)一致を確認したか
- メッシュ系列:系統的細分(可能なら一様)か。実効細分比を計算したか
- 水準数:3以上(推奨4〜5)で最小二乗フィットと隣接ペア次数を併記したか
- 反復残差:各水準で離散化誤差の1/100以下まで収束させたか
- フロア確認:最細水準の誤差絶対値が丸め/打ち切りフロアに接近していないか
- 別の製造解での再現:波数・位相を変えて同じ次数が出るか
- 時間と空間の分離:非定常では片方を固定して測ったか
チェックリストが長い…。結局、次数測定で一番大事な心構えは何ですか?
「次数測定は実験である」という心構えだね。実験に測定器の校正と誤差評価が必須なように、次数測定にも誤差ノルムの検算(測定器の校正)とノイズ源の管理(環境の統制)が要る。プロットに乗らない点があったら、コードのバグを疑う前にまず測定手順を疑う——この順序を守るだけで、原因調査の時間が桁で短くなるよ。そして測定手順が固まったら、それをスクリプト化してソース項の自動導出と一緒に回帰テストにしてしまうこと。次数測定は一度きりの儀式じゃなくて、コードを守り続ける自動化された安全網にしてこそ価値が出る。
関連記事:MMSの概要(統合版)、MMSソース項の自動導出、GCIのトラブルシュート(同じ観測次数を解検証で使う場合)。
関連トピック
なった
詳しく
報告