ALPS using Python/ja
Languages: |
English • 日本語 (ja) • 繁體中文 (zh-tw) • 简体中文 (zh) |
Pythonを利用したALPSプログラムの実行
Pythonを利用して、シンプルな古典モンテカルロシミュレーションをおこないます。MC法チュートリアルのMC-02も参考にしてください。
Pythonの起動
Pythonの使用には標準拡張機能を用いてください。たとえば、LINUX上でALPSをソースからビルドする場合には、ALPSのビルド構成を決めるときにPython インタプリタを選択できます。ALPSはalpspythonスクリプトを生成します。
alpspython
このスクリプトは、ALPSの拡張機能を利用するためのパスを設定し、Pythonインタラプタを呼び出します。
また、MacOSやWindows上でALPSバイナリをインストールする場合は、Vistrailsも同時にインストールする必要があります。ALPSパッケージはVistrailsに同封されているPythonインタラプタに対してビルドされています。呼び出すときは次のコマンドを用います。
vispython
Vistrailsの使用を望まなくても、Vistrailsのような巨大なパッケージのインストールを要求されることに対して疑問に思うかもしれません。しかし、Vistrailsアプリケーションの内容物のほとんどはライブラリやPythonモジュールです。そしてこれらのモジュール群はALPSに必要なのです。ALPSのインストーラをVistrailsに非依存にすると、結局Vistrailsと同じ規模のサイズになってしまいます。
詳細な手順
ALPSモジュールのインポート
Python起動後にインポートが必要となるモジュールは、
import pyalps import matplotlib.pyplot as plt import pyalps.plot
すべてのPythonスクリプトが収められたチュートリアルはこちらを参照してください。
入力ファイル
物理パラメータを含んだシミュレーション情報を次の用に指定してインプットファイルを準備します。
parms = [] for t in [1.5,2,2.5]: parms.append( { 'LATTICE' : "square lattice", 'T' : t, 'J' : 1 , 'THERMALIZATION' : 1000, 'SWEEPS' : 100000, 'UPDATE' : "cluster", 'MODEL' : "Ising", 'L' : 8 } )
次に、シミュレーション用の入力ファイルを指定します。
input_file = pyalps.writeInputFiles('parm1',parms)
全シミュレーションファイルに対して'parm1'を設定します。例の指定では、メインのシミュレーションファイル名は'parm1.in.xml'となります。
シミュレーションの実行
シミュレーションの実行(シリアル)
runApplication関数を用いてシミュレーションを実行します。
pyalps.runApplication('spinmc',input_file,Tmin=5,writexml=True)
パラメータwritexml=Trueは、全計算結果をXMLファイルに出力する事を意味します。それによって、I/O処理が増大しますが、計算結果が容易にwebブラウザで確認できます。大規模な系の計算をおこなう場合は、出力が巨大になり処理時間が遅くなります。
シミュレーションの実行(並列)
MPIを用いて並列シミュレーションをおこなう場合は、次のように記述してください。
pyalps.runApplication('spinmc',input_file,Tmin=5,writexml=True,MPI=4)
MPIのプロセッサー数はMPI引数で与えます。
シミュレーション結果のロード
計算結果の取得
計算結果をロードする前に、結果ファイルのリストを得る必要があります。次のコードを見てください。parm1の結果リストを生成しています。
result_files = pyalps.getResultFiles(prefix='parm1') print result_files
計算結果のロード
次に、どのような物理量が計算されたのか知るために、物理量リストを読み込むことができます。
print pyalps.loadObservableList(result_files)
例として、magnetizationの平均値、二乗値をロードし、選択した物理量を書き出します。
data = pyalps.loadMeasurements(result_files,['|Magnetization|','Magnetization^2']) print data
計算結果のプロット
例えば、温度に対する|Magnetization| をプロットする場合、y軸に|Magnetization| 、x軸に温度Tを選択します。
plotdata = pyalps.collectXY(data,'T','|Magnetization|')
Python matplotlibを利用したプロット
matplotlibを使用したプロットが可能です。以下のように記述してください。
pyalps.plotモジュール:
plt.figure() pyalps.plot.plot(plotdata) plt.xlim(0,3) plt.ylim(0,1) plt.title('Ising model') plt.show()
フォーマット変換
データセットをテキスト、grace、gnuplotなど、他のプロットフォーマットに変換が可能です。
print convertToText(plotdata) print makeGracePlot(plotdata) print makeGnuplotPlot(plotdata)
データ解析
Binder cumulant比などの計算結果を容易に解析することができます。以下のように記述します。
binder = pyalps.DataSet() binder.props = pyalps.dict_intersect([d[0].props for d in data]) binder.x = [d[0].props['T'] for d in data] binder.y = [d[1].y[0]/(d[0].y[0]*d[0].y[0]) for d in data] print binder
d[1].y[0]/(d[0].y[0]*d[0].y[0])は、ジャックナイフ法を用いたモンテカルロ計算の誤差推定に使用される書式です。図の作成を行うために次のように記述します。
plt.figure() pyalps.plot.plot(binder) plt.xlabel('T') plt.ylabel('Binder cumulant') plt.show()
サンプルスクリプト
全シミュレーション過程を記述したスクリプトファイル tutorials/intro-01-basics/tutorial-full.py .
以下に、各過程別に記述したスクリプトを紹介します。
実行とプロット
- MatPlotLibを用いたmagnetizationのプロットスクリプトファイル: tutorials/intro-01-basics/tutorial-magnetization.py
- Graceを用いたmagnetizationのプロットスクリプトファイル: tutorials/intro-01-basics/tutorial-graceplot.py
- Gnuplotを用いたmagnetizationのプロットスクリプトファイル: tutorials/intro-01-basics/tutorial-gnuplot.py
- テキストベースのmagnetizationの出力スクリプトファイル: tutorials/intro-01-basics/tutorial-text.py
詳細な解析
- Binder cumulantsの計算用ファイル tutorials/intro-01-basics/tutorial-binder.py .
サブタスクに分割
計算の前準備、シミュレーションの実行、結果の解析は各サブタスクとして分割ができます。これらはVisTrailsの代わりとして実行が可能です。
- 入力ファイルの準備: tutorials/intro-01-basics/tutorial-prepareinput.py
- シミュレーションの実行: tutorials/intro-01-basics/tutorial-runsimulation.py
- 結果の解析: tutorials/intro-01-basics/tutorial-evaluate.py
その他の例
チュートリアルには、様々な関数や高度なアプリケーションの使い方が用意されています。__doc__メンバを使用して、様々な機能のドキュメントを見ることができます。次のように記述してください。
print pyalps.plot.plot.__doc__