Talk Submission
If you are interested in attending this talk at PyCon JP 2016, please use the social media share buttons below. We will consider the popularity of the proposals when making our selection.
talk
f2pyとmatplotlibを用いたブラウン粒子動力学のリアルタイム可視化 (ja)
Speakers
Hidemitsu Hayashi
Audience level:
Intermediate
Category:
Science
Description
Fortran言語で記述された、大気中に浮遊してブラウン運動する微小粒子の運動解析プログラムを、f2pyによりPythonプログラムと結合し、matplotlibを用いて粒子運動をリアルタイムで可視化した。その結果、運動解析中に粒子の大きさや大気温度を変更可能となり、これらの変数に依存してブラウン運動が変化する様子を視覚的に把握する事が出来る様になった。
Objectives
Brown運動をシミュレートするFortranプログラムを例題として、(1)SciPyに含まれるf2pyを用いてFortranプログラムからPythonのモジュールを生成する方法を学びます。次に(2)このモジュールとmatplotlibを用いて、Brown運動のデータが更新される毎に、逐次描画を更新する方法を学びます。最終的には、(3)Brown運動のパラメータを描画中に変更するGUIプログラムを通じて、matplotlibのイベント処理やwidgetの使い方を学びます。
Abstract
## 0. リアルタイム可視化とは
数値シミュレーションの結果をディスクに保存した後、それを描画プログラムが読み込んで可視化する事をポスト処理と呼ぶ。それとは異なり、数値シミュレーションプログラムの終了を待たずに、シミュレーション結果を逐次描画プログラムが受取り、可視化する事を、本talkでは**リアルタイム可視化**と呼ぶ。
`ポスト処理 : 数値計算 → 結果をディスクに保存 → 描画プロブラム`
`リアルタイム可視化 : 数値計算 → (ネットワーク or メモリ) → 描画プログラム`
## 1. 可視化するプログラムの説明
近年、大気汚染に関する情報として、毎朝の天気予報においてPM2.5の数値が公表されるようになった。PM2.5とは、直径2.5ミクロン以下の微小粒子(PM)が1立方メートル当り何μg含まれるかを示す指標であるが、本talkで取り上げるのはこのPM2.5の振る舞いを記述する数値計算プログラムである。計算手法としてはBrown動力学法を用いており、Fortran言語を用いてコーディングされている。Brown動力学法は、人為的なランダムウオークとは異なり、粒子の大きさや大気温度に応じて粒子の振る舞いを正確に記述する事を述べる。
`Brown動力学法 = Langevin方程式を(コンピュータで)数値的に解く手法`
## 2. FortranプログラムとPythonプログラムの結合
Fortran言語で書かれてたBrown動力学法プログラムから、f2pyを用いて、Pythonのモジュールを生成する。その際に留意すべき点を述べる。
`Fortranプログラム → (main + interface)に分割 → f2py → brown.so`
`f2py -c -m brown --fcompiler=intelem interface.f90 main.o`
## 3. matplotlibによるリアルタイム可視化
matplotlibのリアルタイム描画には複数の方法があるのでそれらを簡単に紹介した後、モジュール化されたBrown動力学法プログラムが微小粒子の位置を計算し、これをPythonプログラムが逐次受取り、matplotlibで粒子位置を軌跡もしくは点としてリアルタイムで描画してお見せする。
`import matplotlib.pyplot as plt`
`import matplotlib.animation as animation`
`import brown`
`・・・`
## 4. matplotlibによるGUIプログラム作成
微小粒子の運動を追跡中に、matplotlibのイベント処理やwidgetを用いて、粒子の大きさや大気温度を変更し、粒子運動が変化する様子を可視化してお見せする。
`from mpl_toolkits.mplot3d import Axes3D`
`from matplotlib.widgets import Slider, Button`
`import brown`
`・・・`