5と6のリビジョン間の差分
2019-10-31 05:42:17時点のリビジョン5
サイズ: 4273
編集者: TakanoriKono
コメント:
2019-10-31 06:06:07時点のリビジョン6
サイズ: 5310
編集者: TakanoriKono
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 71: 行 71:
== データファイルの解析 ==
シミュレーションを実行するとjson形式のデータファイルが生成される。Jsonファイルはデータを木構造で表現したもので、階層的なデータ構造を表現するのに便利である。ファイルの中のデータにアクセルするには、例えばPythonでは以下のようにする。
{{{
import json
f = open('dss.json', 'r')
data = json.load(f)
data['events'][2]['balls'][1]['momentum']
}
上のコードでは、(1)jsonライブラリのインポート、(2)dss.jsonという名前のファイルを開く、(3)ファイル内のjsonデータを読み込んでdataに代入、(4)時刻[2]のときのボール[1]の運動量というデータにアクセスする、ということをやっている。

このデータを使って、より詳細なデータ解析をするためには、Json形式(木構造)によるデータ構造、その中の特定のデータにアクセスする方法に慣れる必要がある。

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

目的

コード

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>と呼ぶことにする。 実際には、自分が好きなディレクトリ名を決めて以下の<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/PSystem
make install

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

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

cd <WORKDIR>
source ./setup.sh

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

cd <WORKDIR>/build
make install

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

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

cd <WORKDIR>/run
runds1.py

を実行する。すると、以下のようなウィンドウが新しく立ち上がるはずである。 dsgui.png

Initialize -> Start -> Stop -> Quitが一連の流れになる。

ボタン

内容

Initialize

初期状態の生成

Start

系の時間発展

Stop

時間発展の停止

Quit

プログラムの終了

データファイルの解析

シミュレーションを実行するとjson形式のデータファイルが生成される。Jsonファイルはデータを木構造で表現したもので、階層的なデータ構造を表現するのに便利である。ファイルの中のデータにアクセルするには、例えばPythonでは以下のようにする。

ParticleSystem (最終更新日時 2019-11-07 06:49:19 更新者 TakanoriKono)