ソリトン分裂に関して(2)

先日の続き。
 
10mメッシュと2mメッシュは殆ど瞬時に数値発散してしまった。原因は直ぐに判ったが非常に悩ましい。(悩ましいという意味については次第に明らかになるので)
 
まず、方程式を見てみる。X方向の流量計算は次のような式になっている。
 
イメージ 1
赤い枠の中が分散項で加わった項。非常に大雑把に言えば計算上は次のような式になる(大雑把過ぎるけど)。Δtが時間ステップ、Δxがメッシュサイズ、hが水深である。
イメージ 2
 
これから次の時間ステップにおけるX方向の流量は
イメージ 3
となる。差分法の性質から右辺括弧の中は1未満程度の小さな値である必要がある。
しかし、よく見てみると 水深の2乗、3乗 という因子が含まれている。これはつまり、メッシュサイズが小さい、あるいは水深が深い場合に値が大きくなるという事。例えばメッシュサイズが100mで深が100mであれば1であるがメッシュサイズが1mで水深が100mであれば値は10000 という巨大な値になる。
 
しかし、これはこれで正しい。メッシュサイズが小さくなるとき時間ステップも小さくしなければならない(CFL条件)ためだ。しかし無節操に時間ステップ小さくするとこれもまた計算結果に問題が起きる事はよく知られている。
 従って
イメージ 4
この部分の寄与が数値発散の原因とならないためにはF,G,Hの値がある程度小さな値であるべきなのだ。つまり数値発散するのはF,G,Hの値が不十分な精度で評価されたという事になる。
 
そしてそれは実際に正しいかも知れない。というのもこの時点で私の頭の中にはある手抜きが思い当たるのだ。