Jos Stam の安定流体法を実装するために使用される線形ソルバーの次の実装に出くわしました。
/**
* Iterative linear system solver using the Gauss-sidel
* relaxation technique. Room for much improvement here...
**/
void linearSolver(int b, float[] x, float[] x0, float a, float c)
{
for (int k = 0; k < 20; k++)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
x[I(i, j)] = (a * ( x[I(i-1, j)] + x[I(i+1, j)]
+ x[I(i, j-1)] + x[I(i, j+1)])
+ x0[I(i, j)]) / c;
}
}
setBoundry(b, x);
}
}
( http://www.multires.caltech.edu/teaching/demos/java/FluidSolver.javaからの実装)
ここで、は配列への単純なインデックス関数であり、x
設定する境界条件の単なるフラグです。x0
I
b
しかし、このコードが何をしているのか正確にはわかりません。一般に、線形ソルバーは を計算しようとすると考えていx
ましたAx = b
。しかし、このコードにはベクトルはなく、行列だけです。
このコードがどのように機能するか知っている人はいますか? 前処理付き共役勾配法を使用して、より効率的にしようとしています。しかし、ここでのリファレンス実装がわかりません。