収束計算
シミュレーションをしていると、計算効率の問題が出てくる場合があります。
この計算が終わるのに半年かかるなんてこともあります。
計算に時間がかかる原因のひとつとして収束計算があります。
しかし、収束計算は大事な過程なんです。
今回はこのことについて書きたいと思います。
収束計算は必要である
収束計算(繰り返し計算)とは簡単にいうと同じ式を使って、繰り返し計算し、収束させることです。
例えば、
1+1という式があります。
FORTRANで書くと
real a
a = 1 + 1
です。
この、a = 1 + 1という式をdo文を使い、繰り返し計算することで収束させます。
まあ、この例では収束させるまでもなくても、収束計算1回目で2という答えが出てきますが(笑)
しかし、微分が入っている式には収束計算は必要です。
収束計算の例
収束計算の例として、エクセルを使用し、定常計算、発熱なし、一次元の熱伝導方程式で説明します。
(この式ばかり使って説明してる(笑))
詳しい条件等はこちら、エクセルで熱伝導方程式を解く
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
1000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 300 |
1000 | 500 | 0 | 0 | 0 | 0 | 0 | 0 | 150 | 300 |
この表はエクセルで、一次元の熱伝導方程式を解いてます。
3行目が1回目の収束計算になりますが、3行目の値を別の式に代入して、さらに計算してもいいと思いますか?
答えとしては、あまり良くないですね。
おそらく、4行目、3点目には250という値が入り、行を重ねると0の数字がなくなります。
その時の行の値を使った方が3行目に出た値を使うより、自然な感じがしませんか。
収束判定
上記の説明で収束計算の重要性が分かってくれたと思います。
(分からなかったらごめんね)
次に重要なのが、どれくらい収束計算(繰り返し)を行うかです。
1000回、1万回するか、10万回するか、100万回するか分からないですよね。
そこで収束判定というものをきめます。
判定の仕方は色々ありますが、今回は繰り返し計算、N回目の値とN-1の値を引いて
その差の最大の値を収束判定に使います。
表の例でいうと3行目(収束計算1回目)の収束値は2点目の500 – 0の500が収束値です。
表には載ってませんが、4行目(収束計算2回目)は3点目の250 – 0の250が収束値になります。
このように収束計算をさせると収束値が小さくなってきます。
じゃあこの収束値の設定をどこにすればいいのか?
その答えは経験とセンスです(笑)
この手の指標は論文に載ってたりしてますし、最悪収束値の値を小さくしていれば何とかなります。
しかし、収束値の値を小さくすると計算時間は長くなります。
上を例にすると500を収束判定にすると、1回目、250にすると2回目で計算が終わります。
0.001を収束判定にすると、多分数回では終わらないと思います。
その分長く計算しないといけません。
計算効率と収束判定のバランスが難しいです。
Fortranによる収束判定
エクセルで収束について説明しましたが、Fortranによる収束値プログラミング方法についても書きます。
上記の収束値の出すのに、AMAX1()というものを使います。
do i = i_min , i_max
RES(n)=AMAX1( RES(n),abs(p(i)-p1(i)))
end do
これはレイノルズ方程式をプログラミングに載せてあるサンプルプログラムに一部です。
この部分がエクセルで説明した、収束判定の部分になります。
動画をで説明
一次元熱伝導方程式を解く動画ですが、途中で収束計算が出てきます。
参考になれば幸いです。
まとめ
収束計算について説明しましたが、数値計算を行う上で時間効率と収束計算のバランスを考えなければならない場面が出てくると思います。
そこは、経験が生きてくると思っているので、たくさん経験をしましょう。
関連記事