1

私は現在、全体に境界がある 3D ボリューム内のガスの拡散と圧力を非常に基本的な用語でシミュレートするプログラムを作成しています。たとえば、アリの洞窟を考えてみてください。達成したい効果: 1. 壁を尊重しながら、時間の経過とともにガスが環境全体に拡散します。2. グリッド ポイントごとの圧力またはガスの圧縮を測定したいと思います。これの効果は、部屋が開いている場合、圧力差を反映する速度でガスが開口部から拡散することです。

私の問題は、理論的な数学の方程式を完全に理解する知識が不足していることです。正直なところ、正確なシミュレーションを求めているわけではありません。物理学の際立った効果のいくつかを実現したいだけです。流体力学には興味がありません (煙のシミュレーションなど)。

このプログラムは OpenCL で記述しますが、C コードや疑似コードなど、あらゆる形式のコード例を喜んで採用します。

3 つの 3D 配列を渡す必要があると考えています。1 つはガス用、もう 1 つは壁を定義するもの (例: xyz = wall に 1 つ)、もう 1 つは圧力を保存するためのものです。私は現在、壁をチェックするのは簡単だと思っています。単純に各隣接セルをチェックし、壁でない場合はセルを考慮します。

For each grid point,
  is wallmatrix[x+1] a wall?
    [diffusion math here]
  is wallmatrix[x-1] a wall?
    [diffusion math here]
  is wallmatrix[y+1] a wall?
    [diffusion math here]
  etc...

しかし、拡散計算をどうすればよいのか、また、これらすべてに圧力をどのように含めるのかがわかりません。

4

2 に答える 2

2

拡散は自己平滑化であるため、最も簡単にシミュレートできます。

たとえば、一定のタイム ステップでシミュレーションを実行し、個々の粒子の位置を追跡し、各タイム ステップで各粒子を一定の (小さい) 距離だけランダムな方向に移動させることができます。

他の方法もあります。たとえば、各グリッド位置の粒子数を変更するグリッド ベースのアプローチを行うことができます。

あなたの質問のわずかな問題は、「圧力差を反映する速度で開口部から拡散する」と言うところです。拡散はパーティクルのランダムな動きにすぎないため、拡散は実際にはこれを行いません。ただし、ガスは開口部から拡散し、より速く見えるため、ここではまっすぐな拡散でも満足できるように見えると思います。実際には、他の場所と同じ速度で拡散していきますが、拡散して戻ってくるものは何もないということです。これは、拡散ではなく圧力勾配がある場合に流体がどのように動作するかを説明する方法であるためです。

于 2013-01-22T16:37:00.233 に答える
1

まあ、これは簡単な作業ではありません!

まず第一に、基本的な拡散またはガスの完全な動きをシミュレートしたいですか? 2 番目のケースはまったく簡単ではありませんが、ここでアイデアを得ることができます。

静的な環境でガスを拡散させたい場合は簡単ですが、全圧を測定することはできません。唯一の変数はガスの局所濃度になります。

この現象はフィックの法則に支配されています。2番目のものはおそらくあなたが探しているものです。

拡散方程式を離散化する方法を理解するには、有限差分法について読んでください。ここに完全な回答を書くには、主題はかなり大きいです。

于 2013-01-22T11:38:34.603 に答える