0

実は、C++ と openGL を使って SPH シミュレーターを開発しています。私が今遭遇したいくつかの問題があります、

ボックスの片側に開始流体粒子を作成し (ボックスを境界ボリュームとして作成します)、ボックスのような形状にし、初期速度をゼロにします。それからメイン ループを開始します。流体はあらゆる方向に広がり始めます。

写真を見てください:

ここに画像の説明を入力 http://i278.photobucket.com/albums/kk86/anggytrisnawan/Screenshot-UntitledWindow-2.png

シミュレーション開始から数秒後のあの写真。私には奇妙に思えます。シミュレーションに使用したパラメーターは次のとおりです。

#define H                   0.040   // Smoothing Length
#define Rho0            1000    // (kg/m^3) water particle rest density
#define Mass                    0.012       // (kg)
#define DT                  0.001       // time step
#define TotalParticles      5000        // total number of particle

注 : 現在、表面張力の計算はまだ行っていません。

解決済み : ここでの私のせい..最初は互いに重なり合っていた..圧力によってそれらが広がった..

4

2 に答える 2

1

あなたが提供した画像から、シミュレーションはすべての粒子が 1 つの隅にある状態で開始されたようです。パーティクルは、互いにオーバーラップしないように何らかの反発力を持つ必要があると考えられるため、シミュレーションが開始されると、この反発力によってパーティクルが強制的に引き離されます。

繰り返しますが、コードを示していないため、上記は限定された推測にすぎません。

于 2011-09-23T09:03:03.697 に答える
1

境界条件の値は何ですか?つまり、どの数値座標がボックスの境界であるか? 体系的な丸め誤差により、シミュレーションが特定の方向に進むと思います。

写真を見ると、-Z 方向に沿って見下ろしている印象があり、ボックスの左下隅は(0, 0, 0) にあります。その場合、粒子シミュレーションは保守的ではありません。つまり、力場が存在する場合のように、粒子を数値 0 に近づける傾向があります。

于 2011-09-23T09:41:37.737 に答える