気体シミュレータ "Piston" ver.1.0.5
Pistonとは?
Pistonは気体の分子運動を可視化したシミュレータです。
気体の運動は目で見えないため、 温度、圧力、体積がどのように関連しあっているかを理解するのは案外難しいものです。 このソフトでは気体の分子運動を、 私の研究でも使用している分子動力学シミュレーションという手法で計算し、 その動きを可視化しています。
気体の分子運動を見ることで、 気体の性質の理解の助けになればと思い、このソフトを作りました。
特徴
- 気体分子の動きを、ニュートン方程式を使ってシミュレートしている。
- 気体分子は、理想気体、ソフトコア粒子、アルゴン原子を使用できる。
- 気体の入った箱の上側はピストンになっているので、圧力の働く様子がよく分かる。
- 気体の温度、圧力、体積をリアルタイムに変化させることができる。
- アルゴンのシミュレーションにより気液相転移を再現できる。
操作
取りあえず実行してみる
プログラムを起動して をクリックするとシミュレーションを実行できます。
箱の中を飛び回っている粒子は気体状態のアルゴン原子です。 粒子に重力は働きませんが、ピストンには重力に相当するような力が働くので、 粒子の衝突がなければ落下します。 ピストンと粒子や粒子と粒子の間には相互作用が働くので、お互いに近づくと力を及ぼし合います。
シミュレーションは気体をピストン付きの容器に気体を入れた状態を表しています。 従って、粒子の衝突によりピストンは上下に動きますが、体積はほぼ一定となり、 容器内の圧力も一定になります。 シミュレーションの条件として温度は一定なるようにしてあるので、 初期状態では温度、体積、圧力が一定となっています。
実行例は以下の通りです。
(デフォルト設定で動画にしたら粒子が小さすぎて見づらかったので、 この例では密度を0.01、温度を200(K)にしてあります。)
圧力、温度の操作
で温度の設定ができます。 (ここでの圧力設定は現在使用できません)
圧力はピストンの重さを変えることで変更できます。 でピストンが重くなって圧力が増加し、 でピストンが軽くなって圧力が減少します。
デフォルトでは等温等圧状態になっているので、 温度を上げると体積が増え、 ピストンを重くして圧力を上げると体積が減る様子が見られます。
条件設定
で温度調節のON/FFができるので、
ONで等温、OFFで断熱状態になります。
でピストン可変のON/OFFができるので、
ONで圧力一定、OFFで体積一定になります。
組み合わせをまとめると以下のようになります。
状態 | ||
---|---|---|
ON | ON | 等温・等圧 |
ON | OFF | 等温・等積 |
OFF | ON | 断熱・等圧 |
OFF | OFF | 断熱・等積 |
スターリングサイクル
操作を組み合わせるとスターリングサイクルを再現できます。
先ずデフォルト状態にしてから
- でピストンを固定して、 で温度を200(K)に上昇 → 圧力増加
- でピストンを可変 → 圧力減少
- でピストンを固定して、 で温度を150(K)に降下 → 圧力減少
- でピストンを可変 → 圧力増加
とすると、最初の状態に戻りスターリングサイクルが完了します。 P-Vのグラフには右図のような軌跡ができます。
気液共存
デフォルト状態から、で密度を液体、 で下面吸着をON、 でピストン可変をOFF、でシミュレーションをスタートします。
この状態で、 でピストンの位置を8回ぐらい上げると、 下が液体で上が気体の気液共存状態となります。 たまに液体から原子が飛び出して気体となり、しばらくすると液体に戻るという変化が見られます。
ここで、温度を下げると気体原子が減り、温度を上げると気体原子が増えるという変化も見られます。 温度高くすると全原子が気体のようにバラバラになりますが、 体積が小さく密度が大きいので実際は超臨界状態となります。
軌跡表示
左クリックで粒子を選択し「設定」-「粒子情報表示」で表示される粒子情報表示ダイアログの「軌跡表示」にチェック を入れると粒子の軌跡が描かれます。 粒子を選択するときはシミュレーションを一時停止した方がやり易いです。
粒子情報表示ダイアログには、 選択された粒子の位置や速度も表示されます。
右クリックで粒子の選択を解除できます。
シミュレーションについて
粒子の動き
粒子の動きは 「分子動力学シミュレーション」 で計算しています。 分子動力学シミュレーションは、原子や分子の動きを調べるために研究でもよく使われる手法です。 シミュレーションでは、現実の物質に則した原子間力を仮定し、 Newton方程式を解くことで原子を動かすので、現実の原子の動きを精度良く再現できます。
分子動力学シミュレーションの長所は原子の動きを直接調べられることなのですが、 粒子数が増えると計算量が多くなり実行に時間がかかるという短所もあります。 Pistonではリアルタイムで計算と表示を行っているので、扱える粒子数は少なく、 現実の現象を再現できない場合もあります。
ピストンの動き
Pistonではその名の通りピストンを使って、圧力が加わっていることを表現しています。 ピストンには重力に相当する下向きに力が働いているので原子が衝突しなければ落下します。 これにより、気体の圧力はおおよそ一定に保たれます。
各メニューの説明
「シミュレーション」メニュー
|
「システム」メニュー
|
「状態設定」メニュー
|
「コントロール」メニュー
|
「ピストン設定」メニュー
|
「設定」メニュー
|
各ダイアログの説明
シミュレーション詳細設定()、 ミュレーションスピード()、 温度・圧力設定() 以下のダイアログを用いて設定を行います。
「シミュレーション詳細設定」ダイアログ
ステップ
- シミュレーションステップ数
「シミュレーション一時停止」にチェックを入れると設定値でシミュレーションが一時停止状態になります。 - 温度調節
「温度調節」にチェックを入れると温度は設定温度付近で揺らぐようになります。
「最大ステップ数」にチェックを入れると設定値のステップ数以降は温度調節を行わなくなります。
「ステップ間隔」で何ステップ毎に温度調節を行うかを設定します。
パラメータ
LJポテンシャルのパラメータσ、ε及び粒子の質量の設定。
- 粒子の大きさを表すLJのσはs(単位はÅ)で設定します。
- 相互作用の強さを大きさを表すLJのεはT(単位はK)で設定します。
- 粒子の質量はArの質量との相対値m'で設定します。
これらの値は通常変更する必要はありません。 詳しくは分子シミュレーションの講義の 「力の計算」 を参照して下さい。
システムサイズ
- 粒子数
面心立方格子(FCC)の単位格子のx, y, z方向の数で粒子数を設定します。 FCCの単位格子には粒子が4つ入るので粒子数はそれぞれの数の積×4となります。
「立方体」にチェックが入っているときはそれぞれの数が連動して変化します。 - 数密度
LJのσを単位とした数密度(σ3の立方体に入る粒子数)を設定します。
「シミュレーションスピード」ダイアログ
表示の更新をシミュレーションの何ステップ毎に行うか設定できます。
例えばこの値が10のときはシミュレーションの10ステップ毎に粒子表示を更新します。
値が小さいときは表示の時間間隔が細かくなり粒子がゆっくり動いているように見えます。
また、逆に値が大きいときは表示間隔が大きくなるので粒子の動きは速く見えるようになります。
大きすぎると表示が飛び飛びになりますので注意して下さい。
「温度・圧力設定」ダイアログ
- 温度設定
シミュレーションの設定温度を設定します。 - 圧力設定
圧力一定のシミュレーションの実行時の圧力を設定します。(ここでは不使用)
「粒子情報」ダイアログ
- pos: 選択された粒子の位置 (x,y,z)
- vel: 選択された粒子の速度 (vx,vy,vz)
- |v|: 選択された粒子の速さ |v|=√(vx2+vy2+vz2)
ダウンロードとインストール
ダウンロード
インストール
ダウンロードしたファイルを適当な場所で解凍します。
できたフォルダに実行ファイルがありますので、ダブルクリックで実行して下さい。
←が実行ファイルです。
更新情報
- 2013/01/19 Piston ver.1.0.5を公開
- 左クリックで粒子選択、右クリックで粒子選択解除できるようにした。
- 粒子情報ダイアログを追加。
- 選択された粒子の軌跡表示を追加。
- 2012/12/19/ Piston ver.1.0.4を公開
- 2012/12/11/ Piston ver.1.0.3を仮公開
使用許諾
- Pistonはフリーソフトであり、自由に個人及び業務での利用ができます。
- Pistonは正しく動作するように作られていますが、得られた結果は保証しません。
- Pistonの使用により被った不利益に対して当方は一切の責任を負いません。
- Pistonは現状のままであれば自由に再配布できます。
謝辞
本ソフトウェアはQt及びqwtを利用して作られています。 これらの優れたライブラリを作成・公開してている開発者に感謝申し上げます。
おまけ
このプログラムはピストン付きのシミュレーションだけでなく、
周期境界条件を用いた普通のMDシミュレーションも実行できます。(シミュレーションの専門家向け)
設定を変更するには、実行ファイルと同じフォルダ内にある「Piston.ini」の
exeMode=1
を
exeMode=2
として下さい。
あとがき
ここで紹介している"Piston"がQtを使って作った初めての本格的なソフトになります。 それまではOpenGL+glutという環境でいくつかソフトを作っていましたが、 ユーザーインターフェースを作るのが大変でした。 そのせいで、cdview ではほぼキーボードショートカットのみでの操作になってしまい、 NoA ではウィンドマネージャもどきまで作ることになりなかなか苦労しました。
本作ではGUIにQt、グラフ表示にqwtを使用したので、普通に使える(?)ソフトになりました。 慣れないGUI作成に四苦八苦しましたが、QtはGUIをCUIで作れるので結構気に入っています。 グラフ表示はcdviewでもやりましたが、軸数字無しの手抜き版だったので、 qwtでちゃんとしたグラフが描けるようになりました。 やっぱり便利なライブラリを使うと簡単に高機能ソフトが作れるのでありがたいものです。 次はcdviewをQt化したいけど、いつになることやら...