製造解の方法(MMS)の概要と手順
理論:解を先に決める
概要
自作の熱解析のコードを検証したいのですが、熱伝導率が温度で変わる問題には厳密解が見つかりません。どうすればいいですか?
製造解の方法(MMS)を使おう。発想を逆にして、先に『こうなってほしい解』を決めてしまうんだ。その解を方程式に代入すると、左辺と右辺が合わない分が出てくる。それを源項として方程式に足してやれば、決めた解がその方程式のちょうどの解になる。あとはその源項を入れてコードで解き、格子を細かくしていったとき、誤差がスキームの理論どおりの速さで減るかを確かめる。解が見た目で合っているかではなく、誤差の減り方で判定するのがポイントだよ。
例題の方程式
熱伝導率が解に依存する非線形の拡散方程式。製造解は滑らかで、両端で0と1になる形を選んだ。
源項と収束次数
源項は記号計算(sympyなど)で求めると、手計算の誤りを防げる。格子幅を半分にしたときの誤差の比から、見かけの収束次数を求める。
解を作るという逆転の発想
解析解のある問題は数が限られ、実際のソフトが扱う非線形・多次元・複雑な境界の方程式には、ほとんど使えない。1980年代にスタインバーグとローチが、解を先に決めて源項で方程式を合わせる方法を示し、2000年代にローチやサリ、ノウプらが、プログラムの検証の標準的な手順として整理した。いまでは乱流モデルを含む流体のコードや、固体・熱・電磁気のソフトの検証に広く使われ、ASMEの検証の規格でもコードの検証の中心的な方法とされている。
計算例:小さなバグを見つける
有限差分で、面の熱伝導率を両隣の平均の温度で評価する正しい実装と、左側の値だけで評価する誤った実装(1文字の違い)を比べた。ピカール反復で解き、節点の最大誤差を求めた。
| 分割数 | 正しい実装の誤差 | 次数 | 誤った実装の誤差 | 次数 |
|---|---|---|---|---|
| 10 | 1.13×10⁻² | — | 4.62×10⁻² | — |
| 20 | 2.85×10⁻³ | 1.98 | 2.13×10⁻² | 1.11 |
| 40 | 7.10×10⁻⁴ | 2.00 | 1.04×10⁻² | 1.03 |
| 80 | 1.78×10⁻⁴ | 2.00 | 5.15×10⁻³ | 1.02 |
| 160 | 4.44×10⁻⁵ | 2.00 | 2.56×10⁻³ | 1.01 |
誤った実装でも誤差は1%くらいで、格子を細かくすれば減っていくんですね。これだと気づけなさそうです。
そこがMMSの強みだ。誤差の大きさだけ見ると、誤った実装も『だいたい合っていて、細かくすれば良くなる』ように見える。グラフに描けば製造解とほとんど重なるだろう。でも誤差の減り方は、正しい実装が2次、誤った実装が1次で、はっきり違う。面の係数を片側の値で評価したことで、2次精度のはずのスキームに1次の誤差が入り込んだんだ。実際の問題では、この差が細かい格子でも消えない数%の誤差として残る。MMSは、見た目では分からない誤りを、次数という数字で浮かび上がらせてくれる。
手順とコツ
- すべての項(対流・拡散・源・非線形の係数)がきちんと効く製造解を選ぶ。単純すぎる解は誤りを隠す。
- 源項と境界条件は記号計算で求め、コードに自動で書き出す。
- 4段階以上の格子で解き、誤差のノルムと次数を求める。
- 境界条件・格子の種類・非線形の反復の設定を変えて、それぞれ確かめる。
- 結果を自動テストにして、コードを変えるたびに次数を確かめる。
「境界だけ1次」
ある流体のコードをMMSで検証したら、内部の格子点の誤差は2次で減るのに、全体の最大誤差は1次でしか減らなかった——という例がある。誤差の分布を見ると、壁の境界の隣の点だけで誤差が大きく、境界条件の実装が1次精度になっていた。壁でのこう配を片側の差分で近似していたのが原因で、2次の片側差分に直すと全体が2次になった。MMSでは、誤差の大きさだけでなく分布も見ると、誤りの場所まで特定できる。
よくある間違い
間違いと対策
| 間違い | 起きること | 対策 |
|---|---|---|
| 誤差の大きさだけで判断 | 次数の低下を見落とす | 次数を必ず求める |
| 単純すぎる製造解 | 一部の項が効かず誤りが隠れる | すべての項が効く解 |
| 源項を手計算 | 源項自体の誤り | 記号計算で自動化 |
| 反復の収束が不十分 | 次数が乱れる | 厳しい収束判定 |
| 格子2つで判断 | 漸近範囲か分からない | 4段階以上 |
関連する内容も知りたいです。
リチャードソン外挿ツールで収束の次数を試せるよ。関連するページはMMSの収束次数、MMSの源項、2次元熱伝導のMMS、ナビエ–ストークス方程式のMMS、コードの検証が参考になる。
なった
詳しく
報告