2

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設定する境界条件の単なるフラグです。x0Ib

しかし、このコードが何をしているのか正確にはわかりません。一般に、線形ソルバーは を計算しようとすると考えていxましたAx = b。しかし、このコードにはベクトルはなく、行列だけです。

このコードがどのように機能するか知っている人はいますか? 前処理付き共役勾配法を使用して、より効率的にしようとしています。しかし、ここでのリファレンス実装がわかりません。

4

0 に答える 0