多粒子系のシミュレーション

目的

コード

github/tkono17/labpp/PSystemにPythonのコードがある。

git clone https://github.com/tkono17/labpp.git

ファイル

内容

python/dss.py

粒子系のシミュレーション(粒子と境界、時間発展)

python/dsgui.py

結果を表示するためのGUI |

scripts/runds1.py

粒子系を設定して実行するためのプログラム

シミュレーションの設定と拡張

python/dss.pyの中のSystemConfigクラスに、設定できるパラメータがある。ここで、生成する粒子の種類や個数等を設定できる。 現状では円形の自由粒子が、弾性衝突をするという状況しか計算していない。

粒子にはたらく力や複雑な境界を定義したければPSystemクラスを拡張する必要がある。

ソフトウェアの導入方法

作業用のディレクトリを作る。以下では、このディレクトリをWORKDIRと呼ぶことにする。

cd <WORKDIR>
git clone https://github.com/tkono17/labpp.git
mkdir build sw
cat > setup.sh <<EOF
export SWDIR=<WORKDIR>/sw
export PATH=${SWDIR}/bin:${PATH}
export LD_LIBRARY_PATH=${SWDIR}/lib:${LD_LIBRARY_PATH}
export PYTHONPATH=${SWDIR}/python:${PYTHONPATH}
EOF
cd build
cmake ../labpp
make install

これをやった後には、<WORKDIR>の下にsw, build, labpp, setup.shといったディレクトリやファイルができているはずである。

新しくターミナルをシェルを立ち上げて作業を開始前に以下を実行する。

cd <WORKDIR>
source ./setup.sh

このソフトウェアはpythonなのでコンパイルは不要であるが、必要なファイルを<WORKDIR>/swの下にインストールするために

cd <WORKDIR>/build
make install

を実行する。これでプログラムを走らせる環境が整う。

プログラムを実行するには

runds1.py

を実行する。すると、以下のようなウィンドウが新しく立ち上がるはずである。 dsgui.png Initialize -> Start -> Stop -> Quitが一連の流れになる。

ボタン

内容

Initialize

初期状態の生成

Start

系の時間発展

Stop

時間発展の停止

Quit

プログラムの終了

課題

シミュレーションを実行するとdss.jsonというファイルが生成される。これは各時刻における粒子の位置、運動量を記録したものである。 この出力結果を元に解析をする。何を調べるかはこれから考える。

  1. 各時刻で系の全エネルギーを計算して、その時間発展を調べる。
    • 弾性衝突のみなら、エネルギーは保存するはずである。保存しない場合は数値的な不安定性がある可能性がる。
  2. 他にも系を特徴づける量を考えて、その量を計算して時間発展を調べる。
    • 個々の粒子のエネルギー、運動量、密度等。ボルツマン分布に従うようになるか。
  3. 質量の異なる2種類の粒子を入れるとどうなるか、系に存在する粒子の個数を変えるとどうなるか。

さらにシミュレーションの内容を発展させるためには、系の運動法則を変えてみる。

  1. 重力場中でシミュレーションをさせる。
    • 最後は全部下に集まって停止する?
  2. 壁で反射する度に、エネルギーを増減させる(熱浴との接触)。
    • 下から熱して、上で冷ますと対流のような現象が起きるか。
  3. 粒子間にポテンシャルを導入する。1/r^2型、Lennard-Jonnes型ポテンシャル等。ポテンシャルの到達距離または密度を変えてみる。
    • いわゆる分子動力学のようなもの。気体っぽい性質や液体っぽい性質が現れるか。