次の問題を解決する最速の方法を探しています。
3D グリッド内の格子点の体積が与えられると、いくつかの点b_i
(境界) が を満たしf(b_i)=0
、別の点a_0
が を満たしf(a_0)= 1
ます。
他のすべてのポイント (非境界) は、周囲の 26 ポイントの線形結合です。たとえば、私はしたいことができます
f(i, j, k)= .05*f(i+1, j, k)+.1*f(i, j+1, k)+.07*f(i, j, k+1)+...
係数の合計は に.05+.1+.07+...
なり1
ます。私の目的は、ボリューム内のf(x_i)
すべてを解決することです。x_i
現在、私は基本的にボリュームの境界を初期化し、周囲の 26 点の加重平均を各点に割り当て、繰り返す逐次過緩和 (SOR) 法を使用しています。SOR メソッドは、f(x_i)
最新の反復f(x_i)
後と前の反復後の組み合わせを使用するだけです。
サイズが 102x102x48 前後の 3D グリッドでこの問題を解決するより速い方法を誰かが知っているかどうか疑問に思っていました。SOR は現在、必要なレベルに収束するのに約 500 ~ 1000 回の反復が必要です (使用する係数によって異なります)。私は、matlab、idl、および c++ を最も喜んで使用します。問題を線形システムに変換し、行列法 (BCGSTAB など) を使用する場合と比較して、SOR がどのくらい速いかを知っている人はいますか? また、どのメソッドが最も効果的に (そして簡単に) 並列化されるでしょうか? 私は 250 コアのクラスターにアクセスでき、mpi と c++ を使用して SOR メソッドを並列化しようとしましたが、思ったほどの速度向上は見られませんでした (理想は 100 倍程度です)。この問題の解決をスピードアップするためのアイデアをいただければ幸いです。ありがとう。